将数据集与最新的行相结合

时间:2017-12-05 22:31:02

标签: r

我想通过id将小数据集组合成一个大型数据集。在大型数据集中,同一个id有很多行,因为有些行是旧记录,有些行是最新的。我想知道如何让来自小数据集的行组合具有相同id的最新行。请给我一些提示。

1 个答案:

答案 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"才会考虑最后一个匹配项。仅对于这些匹配,val2small复制到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