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
相关产品推荐
相关产品推荐

