使用dplyr对含缺失值的数据集按行设置缺失率判断条件
dplyr实现按行判断指定列缺失占比的最优方案
针对你的需求,优先推荐使用rowSums的实现方案,该方案无需逐行分组,对大型数据集的运算效率远高于rowwise写法:
library(dplyr) df <- df %>% mutate( missing = if_else( # 计算score2到score5列的NA数量/总列数,判断是否超过30% # 列数固定为4可直接写4,需要动态适配可替换为ncol(across(score2:score5)) rowSums(is.na(across(score2:score5))) / 4 > 0.3, "yes", "no" ) )
如果你习惯使用rowwise写法,正确代码如下,注意用完后要取消行分组避免影响后续操作:
df <- df %>% rowwise() %>% mutate( missing = if_else( sum(is.na(c_across(score2:score5))) / 4 > 0.3, "yes", "no" ) ) %>% ungroup() # 取消行分组
原代码报错原因
- 语法结构错误:新列
missing的定义需要放在mutate()函数内部 - 列选择错误:直接使用
.x会匹配整行所有列,而非你需要的score2到score5范围 - 行维度列选择逻辑缺失:
rowwise模式下需要用c_across选中指定列进行逐行计算
内容的提问来源于stack exchange,提问作者Sid0311
相关产品推荐
相关产品推荐

