【问题标题】:overwrite information in data.table in R覆盖R中data.table中的信息
【发布时间】:2021-08-31 03:42:55
【问题描述】:

我有一个 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

这样原来的表就变成了:

  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 执行此操作,但我遇到了错误。

【问题讨论】:

    标签: r merge data.table


    【解决方案1】:

    我将您的第一个 data.table 命名为dt_A,第二个命名为dt_B,并假设您通过idyearclass 识别dt_B 中的条目。

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

    返回

       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 列。

    【讨论】:

    猜你喜欢
    • 2015-10-20
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    • 1970-01-01
    相关资源
    最近更新 更多