如何从多列data.frame中删除含-1/8缺失值的行
这里有两种高效的方法,不用逐列处理就能删掉所有包含-1或8的行:
方法一:Base R 原生实现(无需额外安装包)
# 定义代表缺失值的数值 missing_values <- c(-1, 8) # 筛选出没有任何缺失值的行 df_clean <- df[rowSums(sapply(df, function(col) col %in% missing_values)) == 0, ]
原理:sapply(df, ...)遍历每一列,生成一个逻辑矩阵标记每个元素是否为缺失值;rowSums()计算每行的缺失值数量,保留数量为0的行(即完全无缺失值的行)。
方法二:用dplyr包(代码更简洁易读)
如果你常用tidyverse工具链,这种写法更直观:
library(dplyr) df_clean <- df %>% filter_all(all_vars(!(. %in% c(-1, 8))))
原理:filter_all(all_vars(...))要求所有列都满足「值不在-1和8范围内」的条件,自动过滤掉任何包含缺失值的行。
拿你的示例数据测试,处理后会保留Andrea、Micheal、Xien这三行——其余行都包含-1或8的缺失值。
内容的提问来源于stack exchange,提问作者Zaid
相关产品推荐
相关产品推荐

