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

R语言使用summarise(count = n())统计时如何排除指定列的NA值

问题根源

你之前代码中使用的n()统计的是每个Org_unit分组下的总记录数,不会排除指定问题列的NA值,因此统计Q2时也计入了所有无应答用户。

解决方案

统计指定问题的有效应答人数时,用sum(!is.na(目标问题列))替代n(),同时计算选1占比时给mean()添加na.rm = TRUE参数忽略NA值即可,示例代码如下:

library(dplyr)
# Q2的统计逻辑
prop_q2 <- DF %>%
  group_by(Org_unit) %>%
  summarise(
    # 仅统计当前问题的有效应答人数
    valid_count = sum(!is.na(Q2)),
    # 计算占比时跳过NA值,全NA场景会返回NaN,可按需调整为NA或0
    prop = mean(Q2 == 1, na.rm = TRUE)
  )

运行上述代码后,Q2的valid_count会全部返回0,符合你预期的无应答不计入有效统计的要求。

如果需要批量处理多个问题列,可以用across函数一次性生成所有问题的统计结果:

# 同时统计Q1、Q2的有效人数和选1占比
prop_all <- DF %>%
  group_by(Org_unit) %>%
  summarise(
    across(c(Q1, Q2),
           list(
             # 有效应答人数
             valid_n = ~sum(!is.na(.x)),
             # 选1的占比
             prop_1 = ~mean(.x == 1, na.rm = TRUE)
           ))
  )

如果需要将全无效应答场景下返回的NaN调整为NA,可以在计算占比的逻辑后添加替换逻辑:

prop = replace(mean(Q2 == 1, na.rm = TRUE), is.nan(mean(Q2 == 1, na.rm = TRUE)), NA)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 19:57:02