我有以下数据集:
ID value
abc 1
abc NA
abc 2
def 5
def 1
def 4
我知道如何识别包含 NA 的行的 ID。 如果一行包含 NA,我想要做的是删除所有带有 ID 的行。 在这种情况下: abc 的一行显示 NA,因此应删除 ID = abc 的所有行,以便数据框如下所示:
ID value
def 5
def 1
def 4
预先感谢您的任何帮助。
干杯
答案 0 :(得分:3)
您可以使用带有 !
的 ID 的否定 %in%
NA
来删除具有该 ID 的所有行,如果一行包含不适用。
x[!x$ID %in% unique(x$ID[is.na(x$value)]),]
# ID value
#4 def 5
#5 def 1
#6 def 4
答案 1 :(得分:1)
在 ave
末尾的注释中使用可重复显示的 DF 创建一个向量,该向量对于属于 ID
组的每个元素都为 TRUE,其中任何元素都是 NA,然后我们 { {1}} 除了那些。
subset
给予:
subset(DF, !ave(value, ID, FUN = anyNA))
使用 de Morgan's law 这可以等价地表示为:
ID value
4 def 5
5 def 1
6 def 4
subset(DF, ave(!is.na(value), ID, FUN = all))
答案 2 :(得分:1)
将 subset
与 table
一起使用
subset(df1, ID %in% names(which(!table(ID, is.na(value))[, 2])))
答案 3 :(得分:0)
data.table
选项
> setDT(df)[, .SD[!any(is.na(value))], ID]
ID value
1: def 5
2: def 1
3: def 4
数据
> dput(df)
structure(list(ID = c("abc", "abc", "abc", "def", "def", "def"
), value = c(1L, NA, 2L, 5L, 1L, 4L)), class = "data.frame", row.names = c(NA,
-6L))