在 R 中覆盖 data.table 中的信息

overwrite information in data.table in R

我有一个 data.table :

  data.table(id = c(rep(1,5)),
               year = c(rep(2015,3), rep(2016,2)), 
               class = c(rep("A", 3), rep("B", 2)),
               origin = c("Europe", "Asia", "Africa", "Europe", "Asia"), 
               count = c(30299, 3, 34, 2, 800))

   id year class origin count
1:  1 2015     A Europe 30299
2:  1 2015     A   Asia     3
3:  1 2015     A Africa    34
4:  1 2016     B Europe     2
5:  1 2016     B   Asia   800

但有些信息不正确。我想用另一个 data.table:

覆盖该区域
  data.table(id = c(1),
             year = c(2015,2016), 
             class = c("A", "B"),
             origin = c("Europe", "Asia"))

   id year class origin
1:  1 2015     A Europe
2:  1 2016     B   Asia

这样原来的table就变成了:

  id year class origin count
1:  1 2015     A Europe 30299
2:  1 2015     A Europe     3
3:  1 2015     A Europe    34
4:  1 2016     B   Asia     2
5:  1 2016     B   Asia   800

我尝试用 mergewithin 来做这件事,但我遇到了错误。

我将您的第一个 data.table 命名为 dt_A,第二个命名为 dt_B 并假设您通过 idyearclass.

dt_A[dt_B, on = c("id", "year", "class"), origin := i.origin]

returns

   id year class origin count
1:  1 2015     A Europe 30299
2:  1 2015     A Europe     3
3:  1 2015     A Europe    34
4:  1 2016     B   Asia     2
5:  1 2016     B   Asia   800

基本上我们进行了左连接以获取所需的数据并更新了 origin 列。