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即可得到你需要的输出:
| sps | sum | N |
|---|---|---|
| sp1 | 110 | 4 |
| sp2 | 55 | 4 |
| sp5 | 80 | 3 |
| sp6 | 40 | 3 |
补充说明:na.rm = TRUE参数可自动忽略缺失值,确保计算结果不受空值影响
内容的提问来源于stack exchange,提问作者Wilson Souza
相关产品推荐
相关产品推荐

