我有一个像这样的数据框
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_delay
和 date
。然后计算每行中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/