如何基于两个R数据框的同名列生成含均值的结果表格?
解决R数据框同名列逐行均值计算问题
步骤1:合并数据框
先以CodeNidif和Altitude为匹配键,合并两个数据框:
library(dplyr) # 合并数据框,给同名数值列加后缀区分 combined_df <- left_join(mint_04_export, maxt_04_export, by = c("CodeNidif", "Altitude"), suffix = c("_min", "_max"))
步骤2:定位需计算均值的列对
提取两个原数据框中除键列外的列名,筛选出同名的数值列:
# 排除键列,获取各自的数值列名 mint_cols <- setdiff(names(mint_04_export), c("CodeNidif", "Altitude")) maxt_cols <- setdiff(names(maxt_04_export), c("CodeNidif", "Altitude")) # 取两个列表的交集,得到需要计算均值的列名 common_cols <- intersect(mint_cols, maxt_cols)
步骤3:批量计算逐行均值
遍历每一组同名列,计算对应行的均值并生成新列:
for(col in common_cols) { combined_df[[col]] <- rowMeans(combined_df[, paste0(col, c("_min", "_max"))], na.rm = TRUE) }
步骤4:保留目标列
筛选出最终需要的列:
final_df <- combined_df[, c("CodeNidif", "Altitude", common_cols)]
简洁版dplyr管道写法
如果习惯用管道风格,可借助across批量处理:
final_df <- mint_04_export %>% left_join(maxt_04_export, by = c("CodeNidif", "Altitude"), suffix = c("_min", "_max")) %>% mutate(across(all_of(common_cols), ~ rowMeans(select(cur_data(), paste0(.x, c("_min", "_max"))), na.rm = TRUE))) %>% select(CodeNidif, Altitude, all_of(common_cols))
提示:如果数据存在NA值,
na.rm = TRUE可避免结果出现NA,可根据实际需求调整该参数。
内容的提问来源于stack exchange,提问作者Christophe
相关产品推荐
相关产品推荐

