【问题标题】:Selecting values from one dataframe if dates matches other dataframe [duplicate]如果日期与其他数据框匹配,则从一个数据框中选择值
【发布时间】:2018-09-14 06:15:14
【问题描述】:

我有两个数据帧 df1 和 df2,如果 df1$date1 与 df2$date2 匹配,则只打印 df2 中的那些值,如输出所示。

df1:

date1
01-09-2018
01-10-2018
01-11-2018
01-12-2018

df2:

date2       value
01-05-2018      0
01-06-2018      0
01-07-2018      0
01-08-2018      0
01-09-2018      5
01-10-2018      2
01-11-2018      7
01-12-2018      3

output:

value
5
2
7
3

【问题讨论】:

  • df2$value[match(df1$date1, df2$date2)]

标签: r datetime dataframe


【解决方案1】:

我们可以在这里尝试使用merge 的内部连接模式:

merge(df2, df1, by="date", all=FALSE)$value
[1] 5 2 7 3

# data
df2 <- data.frame(date=c("01-05-2018", "01-06-2018", "01-07-2018", "01-08-2018",
                         "01-09-2018","01-10-2018","01-11-2018","01-12-2018"),
                  value=c(0,0,0,0,5,2,7,3))
df1 <- data.frame(date=c("01-09-2018", "01-10-2018", "01-11-2018", "01-12-2018"))

Demo

请注意,我将您的日期列都重命名为 date,这是 merge 轻松工作所必需的。

【讨论】:

    【解决方案2】:

    使用sqldf:我们可以使用date列在两个data.frames之间执行inner join

    library(sqldf)
    sqldf("select a.value from df2 as a JOIN df1 USING(date)")
    

    输出:

       value
    1     5
    2     2
    3     7
    4     3
    

    数据(由 Tim 提供):

    df2 <- data.frame(date=c("01-05-2018", "01-06-2018", "01-07-2018", "01-08-2018",
                     "01-09-2018","01-10-2018","01-11-2018","01-12-2018"),
                     value=c(0,0,0,0,5,2,7,3))
    df1 <- data.frame(date=c("01-09-2018", "01-10-2018", "01-11-2018", "01-12-2018"))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-14
      相关资源
      最近更新 更多