如果满足一行的条件,则删除多行
Remove multiple rows if condition for one row is met
我有以下数据集:
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
您可以使用具有 NA
的 ID 的否定 !
%in%
删除所有行如果一行包含 NA.
x[!x$ID %in% unique(x$ID[is.na(x$value)]),]
# ID value
#4 def 5
#5 def 1
#6 def 4
使用末尾注释中可重复显示的 DF ave
创建一个向量,该向量对于属于 ID
组的每个元素都是 TRUE,其中任何元素都是 NA 然后我们 subset
除了那些。
subset(DF, !ave(value, ID, FUN = anyNA))
给予:
ID value
4 def 5
5 def 1
6 def 4
使用 de Morgan's law 这可以等效地表示为:
subset(DF, ave(!is.na(value), ID, FUN = all))
备注
Lines <- "ID value
abc 1
abc NA
abc 2
def 5
def 1
def 4"
DF <- read.table(text = Lines, header = TRUE)
将 subset
与 table
结合使用
subset(df1, ID %in% names(which(!table(ID, is.na(value))[, 2])))
一个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))
我有以下数据集:
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
您可以使用具有 NA
的 ID 的否定 !
%in%
删除所有行如果一行包含 NA.
x[!x$ID %in% unique(x$ID[is.na(x$value)]),]
# ID value
#4 def 5
#5 def 1
#6 def 4
使用末尾注释中可重复显示的 DF ave
创建一个向量,该向量对于属于 ID
组的每个元素都是 TRUE,其中任何元素都是 NA 然后我们 subset
除了那些。
subset(DF, !ave(value, ID, FUN = anyNA))
给予:
ID value
4 def 5
5 def 1
6 def 4
使用 de Morgan's law 这可以等效地表示为:
subset(DF, ave(!is.na(value), ID, FUN = all))
备注
Lines <- "ID value
abc 1
abc NA
abc 2
def 5
def 1
def 4"
DF <- read.table(text = Lines, header = TRUE)
将 subset
与 table
subset(df1, ID %in% names(which(!table(ID, is.na(value))[, 2])))
一个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))