【问题标题】:Update one column based matching of other two columns with another date frame更新基于一列的其他两列与另一个日期框架的匹配
【发布时间】:2016-10-09 06:20:44
【问题描述】:

我在 R 中有两个数据框:一个大的和一个小的。大数据框的结构如下:

ID Date value1 value2
1  Aug  1      2
1  Sep  1      3
2  Aug  3      2
2  Sep  4      3

小的是这样的:

ID Date value1
1  Aug  2        
2  Aug  5     

大数据框具有小数据框的所有列名以及更多。小的有一些关于 value1 的新值。所以我的任务是根据 IDDate 与小数据框的匹配来更新大数据框的 value1。所以,结果数据框应该是这个,

ID Date value1 value2
1  Aug  2      2
1  Sep  1      3
2  Aug  5      2
2  Sep  4      3

有什么方法可以完成这项工作吗?

【问题讨论】:

  • 使用R标签时请记得通过dput()分享数据(将鼠标悬停在标签上可阅读R标签说明)。

标签: r dataframe match


【解决方案1】:

使用data.table,我们可以将on 加入两个数据集中的IDDate 列,并将i.value1 中的元素分配(:=)到第一个数据集中的value1(@987654328) @)。

library(data.table)
setDT(df1)[df2, value1 := i.value1, on = .(ID, Date)]
df1
#   ID Date value1 value2
#1:  1  Aug      2      2
#2:  1  Sep      1      3
#3:  2  Aug      5      2
#4:  2  Sep      4      3

通过将i. 放在value1 前面,表示data.table 必须从数据框df2value1 中获取值。

【讨论】:

    【解决方案2】:

    可以通过dput()分享数据吗?


    也许,这样的事情应该可行?

    df2[match(df1$ID, df2$ID) & match(df1$Date, df2$Date),'value1']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-11
      • 1970-01-01
      • 1970-01-01
      • 2017-08-15
      • 1970-01-01
      相关资源
      最近更新 更多