2012-03-24 3 views
49

Можно создать дубликат:
Standard way to remove multiple elements from a dataframeR Не в подмножестве

Я знаю, что в R, что если вы ищете подмножество другой группы или согласований на основе идентификатора вы бы использовать что-то например

subset(df1, df1$id %in% idNums1) 

Мой вопрос в том, как сделать обратное или выбрать элементы, не соответствующие вектору идентификаторов.

Я попытался с помощью !, но получаю сообщение об ошибке

subset(df1, df1$id !%in% idNums1) 

Я думаю, что моя резервная копия делать-то вроде этого:

matches <- subset(df1, df1$id %in% idNums1) 
nonMatches <- df1[(-matches[,1]),] 

, но я надеюсь, что есть кое-что немного более эффективным.

+7

увидеть мой ответ здесь: http://stackoverflow.com/questions/7494848/standard-way-to-remove-multiple-elements-from-a -dataframe – Chase

+6

Или, что то же самое, версия Chase, мой ответ [здесь] (http://stackoverflow.com/a/9846035/324364). – joran

ответ

102

Выражение df1$id %in% idNums1 создает логический вектор. Для того, чтобы свести на нет, вы должны свести на нет весь вектор:

!(df1$id %in% idNums1) 
+2

Вспомните дополнительные '()' с операторами if. 'if (! (something)) {print" not something "}' –

+0

Скобки, неудобные при множественном вложенности, я нашел определение оператора '' not-in'' весьма полезным. Есть несколько предложений о том, как это сделать здесь: http://stackoverflow.com/questions/5831794/opposite-of-in – PatrickT

Смежные вопросы