Я знаю, что есть несколько похожих вопросов. Но ответ для них не помогает в моем случае, или я действительно понял их неправильно.
Мой пример кода
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
Итак, вы видите 5 случаев в конце. Я хочу, чтобы эти 5 случаев были удалены из исходного data.frame 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