如何删除指定连续列中含至少5个NA的DataFrame行?
筛选DataFrame:删除指定连续列中NA数量达标的行
原始数据示例
df <- data.frame( dep_delay = c(3, 42, -1, 33), temp = c(68.00, NA, NA, NA), humid = c(53.06, 64.93, NA, NA), wind_dir = c(NA, 360, NA, NA), precip = c(0, 0, NA, NA), pressure = c(1020.8, NA, NA, NA), date = c("2013-05-07", "2013-03-07", "2013-12-31", "2013-12-31"), row.names = c(16983, 26477, 29299, 29300) )
需求说明
仅删除temp到pressure这5列中至少包含5个NA的行(如示例中的29299、29300行),保留其余行(如16983、26477行)。
解决方案
方法1:基础R实现
先定位目标列的索引范围,再统计每行的NA数量,最后筛选符合条件的行:
# 确定temp到pressure的列索引区间 target_cols <- which(names(df) == "temp"):which(names(df) == "pressure") # 计算每行在目标列的NA数量,保留NA数<5的行 df_filtered <- df[rowSums(is.na(df[, target_cols])) < 5, ]
方法2:tidyverse(dplyr)实现
如果习惯使用tidyverse语法,代码更简洁:
library(dplyr) df_filtered <- df %>% filter(rowSums(is.na(across(temp:pressure))) < 5)
筛选结果
运行上述代码后,得到的结果如下:
print(df_filtered) # dep_delay temp humid wind_dir precip pressure date # 16983 3 68.0 53.06 NA 0 1020.8 2013-05-07 # 26477 42 NA 64.93 360 0 NA 2013-03-07
内容的提问来源于stack exchange,提问作者Bluetail
相关产品推荐
相关产品推荐

