r - 如何删除指定列中包含 NA 的行?

标签 r missing-data

我有一个像这样的数据框

      dep_delay  temp  humid wind_dir precip pressure  date
16983  3         68.00 53.06 NA       0      1020.8    2013-05-07 

26477  42        NA  64.93 360      0        NA        2013-03-07
...
29299  -1        NA    NA    NA       NA     NA        2013-12-31 

29300  33        NA    NA    NA       NA     NA        2013-12-31 

我只想删除像 29299 和 29300 这样的行,它们包含从温度到压力的 5 个 NA(这些是连续的列),并保留像 16983 和 26477 这样的行。

期望的结果:

      dep_delay  temp  humid wind_dir precip pressure  date
16983  3         68.00 53.06 NA       0      1020.8    2013-05-07 

26477  42        NA  64.93 360      0        NA        2013-03-07

换句话说,问题是如何仅删除连续至少有 5 个 NA 的行。

显然这不是正确的方法:

df <- df[!is.na(df$temp:df$pressure),]

最佳答案

根据 Yacine Jajji 评论进行更新。

您可以使用dplyr包中的标准filter函数。您设置的列数决不应为NA。在您的情况下,有 2:dep_delaydate。然后计算每行中NA的数量,如果数量等于5则该行将被过滤掉。请参阅下面的代码:

df <- read.table( text = "dep_delay  temp  humid wind_dir precip pressure  date
16983  3         68.00 53.06 NA       0      1020.8    2013-05-07 
26477  42        NA  64.93 360      0        NA        2013-03-07
29299  -1        NA    NA    NA       NA     NA        2013-12-31 
29300  33        NA    NA    NA       NA     NA        2013-12-31")

library(dplyr)

cols_to_remove <- c("temp", "humid", "wind_dir", "precip", "pressure")
df[rowSums(is.na(df[, cols_to_remove])) != 
     ncol(df[, cols_to_remove]), ]

输出:

      dep_delay temp humid wind_dir precip pressure       date
16983         3   68 53.06       NA      0   1020.8 2013-05-07
26477        42   NA 64.93      360      0       NA 2013-03-07

关于r - 如何删除指定列中包含 NA 的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74702726/

相关文章:

R控制每行数据帧的连续NA值的数量

r - 什么相当于 Stata 对 R 中白噪声的 portmanteau (Q) 测试?

r - 如何在数据集的所有列上计算回归并提取参数

r - 如何在同一数据中拟合两个线性回归?

python - 正确处理缺失值和格式化 pandas 数据框打印以制表

python - 如何在Python数组中生成连续的随机NaN

r - 如何强制 cva.glmnet() 在弹性网络回归模型中包含特定变量?

r - facet_wrap, facet_grid - 在 facet 中使用日期类型

python - scikits 机器学习中的缺失值

r - R的randomForest包中缺失值错误