我想通过id将小数据集组合成一个大型数据集。在大型数据集中,同一个id有很多行,因为有些行是旧记录,有些行是最新的。我想知道如何让来自小数据集的行组合具有相同id的最新行。请给我一些提示。
答案 0 :(得分:0)
可以使用data.table
。
首先,我们必须创建一些示例数据。 large
是一个data.table,其中包含每个id
的多个记录。假设large
已经排序,首先是最旧的记录,最新的记录是最后的(对于每个id
)
library(data.table)
n_row <- 10L
n_id <- 5L
set.seed(123L)
large <- data.table(id = sample.int(n_id, n_row, replace = TRUE),
val1 = sample.int(100, n_row))
large
id val1 1: 2 96 2: 4 45 3: 3 67 4: 5 56 5: 5 10 6: 1 86 7: 3 24 8: 5 4 9: 3 31 10: 3 87
第二个data.table small
包含要与large
small <- data.table(id = c(1L, n_id, n_id + 1L),
val2 = LETTERS[1:3])
small
id val2 1: 1 A 2: 5 B 3: 6 C
请注意,small
还包含id
中不存在的large
。
现在,两个表都在id
上加入。如果在large
中找到了多个匹配项,则只有mult = "last"
才会考虑最后一个匹配项。仅对于这些匹配,val2
从small
复制到large
中的新列(加入时更新)。其他行(即使匹配id
)也未更新,因此变为NA
。
large[small, on = "id", mult = "last", val2 := i.val2][]
id val1 val2 1: 2 96 NA 2: 4 45 NA 3: 3 67 NA 4: 5 56 NA 5: 5 10 NA 6: 1 86 A 7: 3 24 NA 8: 5 4 B 9: 3 31 NA 10: 3 87 NA