【问题标题】:Merging two data.frames by key column按键列合并两个data.frames
【发布时间】:2014-06-26 23:13:52
【问题描述】:

我有两个数据框。在第一个中,我有一个 KEY/ID 列和两个变量:

KEY V1 V2
1   10  2
2   20  4
3   30  6   
4   40  8
5   50 10

在第二个数据框中,我有一个 KEY/ID 列和第三个变量

KEY V3 
1    5  
2   10  
3   20  

我想通过根据 KEY 列匹配它们来提取第二个数据帧中的第一个数据帧的行。我还想将 V3 列添加到最终数据集中。

KEY V1 V2 V3 
1   10  2  5
2   20  4 10 
3   30  6 20   

这是我使用子集和合并函数的尝试

subset(data1, data1$KEY == data2$KEY) 
merge(data1, data2, by.x = "KEY", by.y = "KEY")

他们都不做任务。

任何提示都会受到重视。谢谢!

【问题讨论】:

    标签: r dataframe subset


    【解决方案1】:

    merge(data1, data2, by="KEY") 应该这样做!

    【讨论】:

      【解决方案2】:

      如果您想要的是内部连接,那么您的尝试应该这样做。如果它不使用class(data1$key) 检查两个表中的 Key 列的格式。

      除了这些和 Christian 建议的合并之外,您还可以使用 -

      library(plyr)
      join(data1, data2, by="KEY", type="inner")
      

      library(data.table)
      setkey(data1, KEY)
      setkey(data2, KEY)
      data1[,list(data1,data2)]
      

      【讨论】:

      • 谢谢!我不熟悉 plyr 包
      【解决方案3】:

      您可以使用dplyr *_join。给定样本数据,以下两种情况都会给出相同的结果:

      library(dplyr)
      df_merged <- inner_join(data1, data2, by = 'KEY')
      df_merged <- right_join(data1, data2, by = 'KEY')
      

      A inner_join 返回 df1 中 df2 中有匹配值的所有行,以及 df1 和 df2 中的所有列。

      right_join 返回 df2 中的所有行,以及 df1 和 df2 中的所有列。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-02-23
        • 2014-01-06
        • 2017-08-08
        • 1970-01-01
        • 2017-10-26
        • 1970-01-01
        相关资源
        最近更新 更多