在R语言中统计并合并含NA值的行的实现方法
解决方案
基础R实现
拆分数据分别处理后再合并结果:
# 保留var2非缺失的行 non_na_part <- df[!is.na(df$var2), ] # 统计var2缺失的行数,生成汇总行 na_summary_row <- data.frame(var1 = "x", var2 = sum(is.na(df$var2))) # 合并两部分数据 final_result <- rbind(non_na_part, na_summary_row) final_result
运行后输出:
var1 var2 1 a 5 2 b 10 3 x 3
dplyr简洁实现
如果习惯用tidyverse工具链,可通过分组汇总完成:
library(dplyr) df %>% # 将var2为NA的行的var1统一替换为"x" mutate(var1 = case_when(is.na(var2) ~ "x", TRUE ~ var1)) %>% # 按var1分组 group_by(var1) %>% # 分组计算:非x组取原var2值,x组统计行数 summarise(var2 = if_else(var1 == "x", n(), first(var2))) %>% ungroup()
原方法失效原因
你使用的aggregate(data=df,var2~.,na.rm = FALSE, FUN = sum)仅返回a和b的结果,原因在于:
aggregate默认会排除包含NA的分组;- 即便设置
na.rm=FALSE,对NA值求和的结果仍是NA,这类结果不会被保留。而你的需求是统计NA的行数,而非对NA求和,因此需要换用统计行数的逻辑。
内容的提问来源于stack exchange,提问作者Honorato
相关产品推荐
相关产品推荐

