【问题标题】:Merge dataframes in R by date and a second variable按日期和第二个变量合并 R 中的数据框
【发布时间】:2014-12-17 02:20:09
【问题描述】:

我有兴趣在 R 中合并两个数据框。我想按日期和第二个 ID 变量合并。例如,创建两个有一些但不完全重叠的数据帧(df1 和 df2):

df1 <- data.frame(ID=c(rep(1,5),rep(2,3),rep(3,7)),
              Date=c(seq( as.Date("2011-07-01"), by=1, len=5),
                     seq( as.Date("2011-07-01"), by=1, len=3),
                     seq( as.Date("2011-07-01"), by=1, len=7)))
df2 <- data.frame(ID=c(rep(1,3),rep(2,2),rep(3,7)),
              Date=c(seq( as.Date("2011-07-01"), by=1, len=3),
                     seq( as.Date("2011-07-01"), by=1, len=2),
                     seq( as.Date("2011-07-01"), by=1, len=7)),
              var=c(rep(12,3),rep(5,2),rep(9,7)))

产量:

> df1
   ID   Date
1   1 2011-07-01
2   1 2011-07-02
3   1 2011-07-03
4   1 2011-07-04
5   1 2011-07-05

> df2
   ID   Date     var
1   1 2011-07-01  12
2   1 2011-07-02  12
3   1 2011-07-03  12
4   2 2011-07-01  5 , etc..

我想要 join_all(type="full") 或 merge(all=TRUE) 的等效项,以便在不可能重叠时出现 NA。我希望匹配具有相同 ID 和日期的案例。

> df3
 ID    Date       var
1 1   2011-07-01  12
2 1   2011-07-02  12
3 1   2011-07-03  12
4 1   2011-07-04  NA
5 1   2011-07-05  NA, etc.

谢谢!

【问题讨论】:

    标签: r date merge


    【解决方案1】:

    好像你想要这样的东西,

    > merge(df1, df2, by=c("ID", "Date"), all = TRUE)
       ID       Date var
    1   1 2011-07-01  12
    2   1 2011-07-02  12
    3   1 2011-07-03  12
    4   1 2011-07-04  NA
    5   1 2011-07-05  NA
    6   2 2011-07-01   5
    7   2 2011-07-02   5
    8   2 2011-07-03  NA
    9   3 2011-07-01   9
    10  3 2011-07-02   9
    11  3 2011-07-03   9
    12  3 2011-07-04   9
    13  3 2011-07-05   9
    14  3 2011-07-06   9
    15  3 2011-07-07   9
    

    【讨论】:

      【解决方案2】:

      merge 是一个有用的基本函数。但也建议看看dplyr 包。很确定你很快就会碰到它。

      library(dplyr)
      left_join(df1,df2)
      # Joining by: c("ID", "Date")
      #    ID  Date var
      # 1   1 15156  12
      # 2   1 15157  12
      # 3   1 15158  12
      # 4   1 15159  NA
      # 5   1 15160  NA
      # 6   2 15156   5
      # 7   2 15157   5
      # 8   2 15158  NA
      # 9   3 15156   9
      # 10  3 15157   9
      # 11  3 15158   9
      # 12  3 15159   9
      # 13  3 15160   9
      # 14  3 15161   9
      # 15  3 15162   9
      

      【讨论】:

        猜你喜欢
        • 2020-12-24
        • 2020-11-05
        • 2019-08-18
        • 2014-08-21
        • 1970-01-01
        • 2021-01-16
        • 1970-01-01
        • 1970-01-01
        • 2018-10-01
        相关资源
        最近更新 更多