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

计算加权分组百分比时如何剔除缺失值

解决加权百分比计算中排除NA值的问题

要让NA值完全不纳入加权百分比的分析,只需在数据整理阶段过滤掉带有NA的观测,确保后续分组和计算仅针对有效数据。以下是修改后的完整代码:

library(srvyr)
library(tidyverse)

df <- data.frame(
    wave = rep(c(1,2),6),
    gender = rep(c("m", "f", NA),4),
    exp = rep(c("c", "e", NA),4),
    weights = rnorm(12, 1, .5)
)

df %>% 
  gather(key, value, gender, exp) %>%
  filter(!is.na(value)) %>%  # 剔除所有value为NA的观测,完全排除缺失值
  as_survey_design(1, weight = weights) %>%
  group_by(wave, key, value) %>%
  summarise(
    prop_weighted = survey_mean(na.rm = TRUE)*100,
    prop_weighted_se = attr(survey_mean(na.rm = TRUE), "var") %>% sqrt()*100
  )

关键修改说明

  • 新增filter(!is.na(value)):这一步直接移除了所有带有NA的行,避免后续分组时出现NA类别,同时让加权百分比的计算分母变为对应wave和key下非NA观测的加权总和,确保百分比仅针对有效类别计算。
  • 原代码中的survey_mean(na.rm = TRUE)主要处理计算过程中的NA,但如果不提前过滤,分组会保留NA组,且百分比是基于所有观测(包括NA)的占比,不符合需求。

运行结果示例

修改后的输出会去掉所有NA相关的行,每个分组下的非NA类别加权百分比总和为100%:

# A tibble: 8 × 4
# Groups:   wave, key [4]
    wave key    value prop_weighted prop_weighted_se
   <dbl> <chr>  <chr>         <dbl>            <dbl>
 1     1 exp    c              41.2             22.1
 2     1 exp    e              58.8             22.1
 3     1 gender f              58.8             22.1
 4     1 gender m              41.2             22.1
 5     2 exp    c              57.5             22.5
 6     2 exp    e              42.5             22.5
 7     2 gender f              42.5             22.5
 8     2 gender m              57.5             22.5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 02:05:15