2012-03-24 12 views
49

Powiel możliwe:
Standard way to remove multiple elements from a dataframeR nie w podgrupie

wiem w badania, że ​​jeśli szukasz podzbioru innej grupy lub dopasowywania na podstawie id chcesz użyć czegoś lubię

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

Moje pytanie brzmi: jak zrobić coś przeciwnego lub wybrać elementy NIE pasujące do wektora identyfikatorów.

Próbowałem za pomocą ! ale pojawia się komunikat o błędzie

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

myślę, że moja kopia zapasowa jest zrobić kiedyś tak:

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

ale mam nadzieję, że coś nieco bardziej wydajny.

+7

zobaczyć moją odpowiedź tutaj: http://stackoverflow.com/questions/7494848/standard-way-to-remove-multiple-elements-from-a -dataframe – Chase

+6

Lub podobnie do wersji Chase'a, moja odpowiedź [tutaj] (http://stackoverflow.com/a/9846035/324364). – joran

Odpowiedz

102

Wyrażenie df1$id %in% idNums1 tworzy wektor logiczny. Negować to, trzeba zanegować cały Vector:

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

Pamiętaj o dodatkowych instrukcjach '()' if. 'if (! (something)) {print" not something "}' –

+0

Nawiasy niewygodne, gdy istnieje wiele zagnieżdżeń, znalazłem definiujące operator '' not-in'' całkiem pomocne. Istnieje kilka sugestii, jak to zrobić tutaj: http://stackoverflow.com/questions/5831794/opposite-of-in – PatrickT