如果日期与其他数据框匹配,则从一个数据框选择值

时间:2018-09-14 06:15:14

标签: r datetime dataframe

我有两个数据帧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

2 个答案:

答案 0 :(得分: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轻松工作所必需的。

答案 1 :(得分:1)

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

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

输出:

   value
1     5
2     2
3     7
4     3

数据(由蒂姆提供):

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"))