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

R语言:解决mutate+rowMeans报错,生成排除缺失值超1的均值列

解决方法与代码修正

首先,你代码里的错误是把na.rm=TRUE放错了位置——这个参数属于rowMeans函数,不是数据框的索引操作[,所以才会报unused argument (na.rm = TRUE)的错误。

下面是实现需求的完整方案:

步骤1:定义需要计算均值的变量列表

先把目标变量存成一个向量,方便后续复用:

vars_to_mean <- c("QLB008A", "QLB008B", "QLB008C", "QLB008D", 
                  "QLB012A", "QLB012B", "QLB012C", "QLB012D", 
                  "QLB016A", "QLB016B", "QLB016C", "QLB016D")

步骤2:生成均值列并处理缺失值过多的观测

如果希望缺失值超过1个的观测,其均值列设为NA(保留这些行),用以下代码:

h18lb_r <- h18lb_r %>%
  mutate(
    # 统计每行目标变量的缺失值数量
    na_count = rowSums(is.na(pick(all_of(vars_to_mean)))),
    # 仅当缺失值≤1时计算均值,否则设为NA
    social_network_contact_mean = ifelse(
      na_count <= 1,
      rowMeans(pick(all_of(vars_to_mean)), na.rm = TRUE),
      NA
    )
  ) %>%
  # 可选:移除中间生成的na_count列
  select(-na_count)

如果希望直接删除缺失值超过1个的观测(从数据框中移除这些行),用以下代码:

h18lb_r <- h18lb_r %>%
  mutate(
    na_count = rowSums(is.na(pick(all_of(vars_to_mean)))),
    social_network_contact_mean = rowMeans(pick(all_of(vars_to_mean)), na.rm = TRUE)
  ) %>%
  filter(na_count <= 1) %>%
  select(-na_count)

补充:原错误代码的基础修正(仅计算均值忽略缺失值)

如果只是想单纯计算均值忽略缺失值(不过滤观测),正确的写法是:

h18lb_r <- h18lb_r %>%
  mutate(social_network_contact_mean = rowMeans(pick(all_of(vars_to_mean)), na.rm = TRUE))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 16:02:48