You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言无需合并多数据框按行计算指定列对应均值

实现方法

从你给出的样例数据看,三个数据框行数一致、行顺序完全对应(ID列和N_D_SOS列取值完全匹配),不需要做任何表合并操作,直接对同名列逐位置计算平均值即可。

无依赖基础R写法

直接对三个表的对应列做算术平均,逻辑直白运行效率也最高:

# 指定需要计算均值的列
calc_cols <- c("N_EVI_SOS", "N_NDVI_SOS", "N_NIRv_SOS", "N_kNDVI_SOS")

# 逐列计算三表对应行的均值,保留ID方便匹配结果
res <- data.frame(ID = nSOS_VI_GPR_05$ID)
for (col in calc_cols) {
  res[[paste0("mean_", col)]] <- (
    nSOS_VI_GPR_05[[col]] + nSOS_VI_GPR_10[[col]] + nSOS_VI_GPR_15[[col]]
  ) / 3
}

你举的N_EVI_SOS第一行样例计算结果为(134+139+144)/3=139,和预期完全一致。

通用扩展写法

如果后续要增加更多同结构的数据表,不用重复写加法逻辑,可以把所有表放进列表统一计算:

# 将所有待计算的数据框存入列表
df_list <- list(nSOS_VI_GPR_05, nSOS_VI_GPR_10, nSOS_VI_GPR_15)
calc_cols <- c("N_EVI_SOS", "N_NDVI_SOS", "N_NIRv_SOS", "N_kNDVI_SOS")

res <- data.frame(ID = nSOS_VI_GPR_05$ID)
for (col in calc_cols) {
  # 提取所有表的当前列,按行求平均
  res[[paste0("mean_", col)]] <- rowMeans(
    sapply(df_list, function(df) df[[col]])
  )
}

可选校验:如果担心三个表的行顺序不匹配,不需要合并全表,只用ID列做行对齐即可:

nSOS_VI_GPR_10 <- nSOS_VI_GPR_10[match(nSOS_VI_GPR_05$ID, nSOS_VI_GPR_10$ID), ]
nSOS_VI_GPR_15 <- nSOS_VI_GPR_15[match(nSOS_VI_GPR_05$ID, nSOS_VI_GPR_15$ID), ]

内容的提问来源于stack exchange,提问作者Cláudio Siva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 20:54:19