如何在R中按匹配的日期列从另一数据框提取对应列的值
R语言按日期匹配填充数据框的实现方法
需求说明
现有两个结构相近的数据框df1、df2,均包含日期列a、数值列vv和tv,需保留df1的全部日期范围,将df2中同日期对应的vv、tv值填充到df1对应行,无匹配位置保留NA。
示例测试数据
df1 <- data.frame(a= seq.Date(from = as.Date("2021-08-14"), to = as.Date("2021-08-20"), by = 1), vv= NA, tv= NA) df2 <- data.frame(a=as.Date(c("2021-08-14","2021-08-15","2021-08-22", "2021-08-16","2021-08-17","2021-08-25","2021-08-26")), vv=c(12,11,13,14,15,16,10), tv= c(1,2,3,4,5,6,7))
实现方法
方法1:基础R原生实现
使用merge()函数做左连接,保留df1的所有行,自动匹配填充值:
df3 <- merge( x = df1[, "a", drop = FALSE], y = df2, by = "a", all.x = TRUE )
方法2:dplyr包实现(代码更简洁)
使用left_join()左连接函数实现:
library(dplyr) df3 <- df1 %>% select(a) %>% left_join(df2, by = "a")
输出结果验证
最终得到的df3和预期一致,保留df1的全部日期,匹配到的vv、tv填充对应值,无匹配项为NA:
> df3 a vv tv 1 2021-08-14 12 1 2 2021-08-15 11 2 3 2021-08-16 14 4 4 2021-08-17 15 5 5 2021-08-18 NA NA 6 2021-08-19 NA NA 7 2021-08-20 NA NA
内容的提问来源于stack exchange,提问作者Amit
相关产品推荐
相关产品推荐

