R中按Date合并同列名同维度数据框并对匹配列求均值的实现方法
R实现多个同结构数据框按日期合并取均值
基于dplyr + purrr的方案(优先推荐)
该方案逻辑清晰、可读性强,也适配批量处理大量数据框的场景:
# 加载依赖包 library(dplyr) library(purrr) # 示例输入数据 df1 <- data.frame(Date=c("2019-01-01","2019-01-02","2019-01-03"),A=c(3,2,1),B=c(2,2,2),C=c(1,3,3)) df2 <- data.frame(Date=c("2019-01-01","2019-01-02","2019-01-03"),A=c(1,2,3),B=c(4,4,4),C=c(3,3,1)) df3 <- data.frame(Date=c("2019-01-01","2019-01-02","2019-01-03"),A=c(5,2,3),B=c(4,5,4),C=c(3,3,1)) # 合并计算逻辑 df_list <- list(df1, df2, df3) # 所有待合并数据框放入列表 df4 <- df_list %>% list_rbind() %>% # 纵向拼接所有数据框 group_by(Date) %>% # 按日期字段分组 summarise(across(where(is.numeric), ~round(mean(.), 1))) # 对所有数值列计算均值,保留1位小数
base R实现方案
无需加载第三方包,适合轻量使用场景:
# 示例输入数据和上文一致 df1 <- data.frame(Date=c("2019-01-01","2019-01-02","2019-01-03"),A=c(3,2,1),B=c(2,2,2),C=c(1,3,3)) df2 <- data.frame(Date=c("2019-01-01","2019-01-02","2019-01-03"),A=c(1,2,3),B=c(4,4,4),C=c(3,3,1)) df3 <- data.frame(Date=c("2019-01-01","2019-01-02","2019-01-03"),A=c(5,2,3),B=c(4,5,4),C=c(3,3,1)) # 合并计算逻辑 all_df <- rbind(df1, df2, df3) # 纵向拼接所有数据框 df4 <- aggregate(. ~ Date, data = all_df, FUN = function(x) round(mean(x), 1))
如果不需要保留固定小数位数,直接去掉代码中的round()函数即可。
内容的提问来源于stack exchange,提问作者GVK
相关产品推荐
相关产品推荐

