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

R语言循环遍历列合并两个数据框并统计物种总和与计数的实现方法

R语言for循环实现跨数据框物种统计

步骤1:构造符合预期的示例数据

先创建符合你描述的两个测试数据框,方便验证结果:

# 第一个数据框:4行,列itens、sp1、sp2
df1 <- data.frame(
  itens = paste0("item", 1:4),
  sp1 = c(20, 30, 40, 20), # 总和110
  sp2 = c(10, 15, 20, 10)  # 总和55
)

# 第二个数据框:3行,列itens、sp5、sp6
df2 <- data.frame(
  itens = paste0("item", 7:9),
  sp5 = c(25, 30, 25), # 总和80
  sp6 = c(10, 15, 15)  # 总和40
)

步骤2:for循环实现统计逻辑

核心逻辑是先提取所有需要统计的物种列名,循环遍历每一列计算总和与有效记录数:

# 1. 收集所有待统计的物种列(排除itens列)
sp_cols <- c(colnames(df1)[!colnames(df1) %in% "itens"], 
             colnames(df2)[!colnames(df2) %in% "itens"])

# 2. 初始化结果数据框
result <- data.frame(sps = character(),
                     sum = numeric(),
                     N = integer(),
                     stringsAsFactors = FALSE)

# 3. 循环遍历每个物种列计算指标
for (sp in sp_cols) {
  # 判断物种所属数据框
  val <- if (sp %in% colnames(df1)) df1[[sp]] else df2[[sp]]
  # 计算总和、有效记录数(自动排除NA值)
  sum_val <- sum(val, na.rm = TRUE)
  n_val <- sum(!is.na(val))
  # 追加结果到输出表
  result <- rbind(result, data.frame(sps = sp, sum = sum_val, N = n_val))
}

输出结果验证

运行后打印result即可得到你需要的输出:

spssumN
sp11104
sp2554
sp5803
sp6403

补充说明:na.rm = TRUE参数可自动忽略缺失值,确保计算结果不受空值影响

内容的提问来源于stack exchange,提问作者Wilson Souza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:45:05