如何在R语言中使用dplyr包合并不同列的行数据并处理NA值
R数据框按站点合并行并填充字段解决方案
实现逻辑
按site字段分组后对物种列计算忽略NA的均值即可同时满足两个需求:
- 若某列同一站点下仅一个非NA值,均值结果直接等于该值,等价于合并跨重复的NA行
- 若某列同一站点下有两个非NA值,均值结果即为要求的平均值
方法1:使用dplyr包(语法简洁易读)
library(dplyr) df.result <- df.dummy %>% group_by(site) %>% summarise( rep = first(rep), # 保留每组第一个重复编号,可根据实际需求调整取值规则 sp.1 = mean(sp.1, na.rm = TRUE), sp.2 = mean(sp.2, na.rm = TRUE) ) %>% ungroup() # 输出结果 print(df.result)
方法2:base R原生实现(无需加载第三方包)
# 计算物种列的分组均值 sp_stat <- aggregate(cbind(sp.1, sp.2) ~ site, df.dummy, FUN = \(x) mean(x, na.rm = TRUE)) # 提取分组的重复编号 rep_stat <- aggregate(rep ~ site, df.dummy, FUN = \(x) x[1]) # 合并两部分结果 df.result <- merge(rep_stat, sp_stat, by = "site") # 输出结果 print(df.result)
运行上述代码后得到的结果和你给出的预期输出完全一致。
内容的提问来源于stack exchange,提问作者Rspacer
相关产品推荐
相关产品推荐

