Удалить строки из фрейма данных, где строка соответствует строке

Я удаляю все строки в кадре данных, где определенная строка соответствует критериям соответствия строки?

Например:

A,B,C
4,3,Foo
2,3,Bar
7,5,Zap

Как мне вернуть фрейм данных, который исключает все строки, где C = Foo:

A,B,C
2,3,Bar
7,5,Zap

person Kyle Brandt    schedule 11.07.2011    source источник
comment
Связанный вопрос: Удаление определенных строк из фрейма данных.   -  person Joshua Ulrich    schedule 11.07.2011


Ответы (4)


Просто используйте == с символом отрицания (!). Если dtfm — это имя вашего data.frame:

dtfm[!dtfm$C == "Foo", ]

Или, чтобы переместить отрицание в сравнении:

dtfm[dtfm$C != "Foo", ]

Или, еще короче, используя subset():

subset(dtfm, C!="Foo")
person Luciano Selzer    schedule 11.07.2011
comment
Или просто dftm[dtfm$C != "Foo", ], что то же самое, но немного легче читать. - person Sacha Epskamp; 11.07.2011
comment
Как бы вы сделали это с произвольным количеством условий? Например, если вы хотите удалить все строки, где C = Foo или C = Bar? - person Zelbinian; 05.03.2013
comment
Это был бы другой вопрос. Но ключ в том, чтобы использовать %in% и!. В вашем примере !(C %in% c(Foo, Bar)) - person Luciano Selzer; 05.03.2013
comment
Всем хороших отзывов. Чтобы завершить предложение Лучано для примера без подмножества(), я обнаружил, что это работает для обрезки нежелательных строк: dtfm ‹- dtfm[!(dtfm$C %in% c(Foo, Bar)),] чтобы забыть запятую в скобках []. - person Robert Casey; 19.02.2014

Вы можете использовать пакет dplyr, чтобы легко удалить эти конкретные строки.

library(dplyr)
df <- filter(df, C != "Foo")
person Pranesh Krishnamurthy    schedule 14.11.2017

У меня был столбец (A) во фрейме данных с 3 значениями (да, нет, неизвестно). Я хотел отфильтровать только те строки, которые имели значение «да», для которых это код, надеюсь, это тоже поможет вам, ребята, -

df <- df [(!(df$A=="no") & !(df$A=="unknown")),]
person Pratik Honrao    schedule 17.04.2018

если вы хотите использовать dplyr для удаления строки Foo:

df %>%
 filter(!C=="Foo")
person wesleysc352    schedule 07.01.2021