我data.table
在 R 中有一个包含四列的 df:id、start、end、score。start 和 end 的范围从 1 到 10,并且 id 可能有重复项。我想将此 data.table 转换为一个新矩阵 B,其中每行对应一个 id,并且有 10 列对应从 1 到 10 的每个位置。如果某个位置在 df 中特定 id 的 start 和 end 范围内,则 B 中相应的单元格应该是分数,否则应该是 0。
例如:
library(data.table)
df <- data.table(id = c(1, 1, 2), start = c(1, 5, 1), end = c(3, 7, 2), score = c(10, 20, 30))
df
id start end score
1 1 1 3 10
2 1 5 7 20
3 2 1 2 30
预期产出:
id 1 2 3 4 5 6 7 8 9 10
1 10 10 10 0 20 20 20 0 0 0
2 30 30 0 0 0 0 0 0 0 0
首先按行扩展数据的现有分数,然后添加缺失的行,最后
transpose
。解决您的问题的一个可能方法是: