R语言实现日期范围不等的分组数据集按日合并
R语言实现两个数据框按日期分组全量匹配、缺失值补0
实现思路
核心是用左连接以包含全量日期、分组组合的DF1为基准表,匹配DF2的指标字段,再将匹配不到的缺失指标填充为0即可:
- 连接时以
Date(日期)、Group(分组)两个字段作为共同匹配键 - 保留DF1的所有行,DF2匹配到的行保留原有
New、Processed值,匹配不到的位置会自动生成NA值 - 最后将两个指标列的NA值统一替换为0,就是最终需要的结果
具体代码实现
方法1:dplyr 写法(最常用,可读性高)
先确保已安装dplyr包,运行以下代码即可:
library(dplyr) # 提前校验日期字段类型,若不是Date类型先执行转换 DF1$Date <- as.Date(DF1$Date) DF2$Date <- as.Date(DF2$Date) # 连接+补0 final_df <- DF1 %>% left_join(DF2, by = c("Date", "Group")) %>% mutate( New = ifelse(is.na(New), 0, New), Processed = ifelse(is.na(Processed), 0, Processed) )
方法2:Base R 写法(无需加载第三方包)
不需要安装任何扩展包,直接运行基础R代码就能实现:
# 提前校验日期字段类型 DF1$Date <- as.Date(DF1$Date) DF2$Date <- as.Date(DF2$Date) # 左连接 final_df <- merge( x = DF1, y = DF2, by = c("Date", "Group"), all.x = TRUE ) # 将两个指标列的缺失值替换为0 final_df[, c("New", "Processed")][is.na(final_df[, c("New", "Processed")])] <- 0
结果校验
按照给出的示例场景,跑完代码后1001分组对应日期的输出结果如下,完全符合要求:
| Date | Group | New | Processed |
|---|---|---|---|
| 2021-04-20 | 1001 | 100 | 0 |
| 2021-04-21 | 1001 | 0 | 0 |
内容的提问来源于stack exchange,提问作者user17582908
相关产品推荐
相关产品推荐

