我知道有一些类似的问题。但他们的答案对我的情况没有帮助,或者我理解错了。
set.seed(0)
df <- data.frame(A = seq(20),
B1 = sample(c(T, F), 20, replace=T),
B2 = sample(c(T, F), 20, replace=T))
rownames(df) <- df$A
df <- df[, c('B1', 'B2'), drop = FALSE]
result <- df[df$B1 == FALSE & df$B2 == FALSE, ]
print(result)
结果是
> result
B1 B2
1 FALSE FALSE
4 FALSE FALSE
10 FALSE FALSE
16 FALSE FALSE
18 FALSE FALSE
df
没有
rownames()
或命名行。所以有名字的行
1, 4, 10, 16, 18
应在不导致其他行重命名的情况下删除。
我的尝试(基于其他答案):
> library(dplyr)
> anti_join(df, result)
Joining, by = c("B1", "B2")
B1 B2
1 TRUE FALSE
2 TRUE TRUE
3 FALSE TRUE
4 TRUE TRUE
5 FALSE TRUE
6 FALSE TRUE
7 FALSE TRUE
8 TRUE TRUE
9 TRUE TRUE
10 TRUE FALSE
11 FALSE TRUE
12 TRUE TRUE
13 TRUE FALSE
14 FALSE TRUE
15 TRUE FALSE
这里的行名不正确。它们只是从1到15。
> setdiff(df, result)
B1 B2
1 TRUE FALSE
2 TRUE TRUE
3 FALSE TRUE