繁体   English   中英

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

[英]How to drop rows containing NA in specified columns?

我有一个这样的 dataframe

      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 package 中使用标准filter function。您设置的列数永远不应为NA 在您的情况下有2dep_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]), ]

Output:

      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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM