Chciałbym podzbioru (filtr) ramkę danych, określając, które wiersze są przechowywane w nowej ramce danych. Oto uproszczony przykład dataframe:Podzbiór obrazu według wielu warunków logicznych wierszy, aby usunąć
data
v1 v2 v3 v4
a v d c
a v d d
b n p g
b d d h
c k d c
c r p g
d v d x
d v d c
e v d b
e v d c
Na przykład, jeżeli rząd kolumnowej v1 ma „B”, „D”, lub „e”, chcę, aby pozbyć się tego wiersza obserwacji, produkujących następująca ramka danych:
v1 v2 v3 v4
a v d c
a v d d
c k d c
c r p g
Udało mi się wykonać podzbiór na podstawie jednego warunku na raz. Na przykład, tutaj mogę usunąć wiersze gdzie V1 zawiera „B”:
sub.data <- data[data[ , 1] != "b", ]
Mam jednak wiele, wiele takich warunkach, że robi to po jednym na raz nie jest pożądane. Nie udało się wpisem:
sub.data <- data[data[ , 1] != c("b", "d", "e")
lub
sub.data <- subset(data, data[ , 1] != c("b", "d", "e"))
Próbowałem kilka innych rzeczy, a także, jak !%in%
, ale to nie wydaje się istnieć. Jakieś pomysły?
Ładne i proste, dzięki. Nie jestem pewien, które rozwiązanie bardziej mi się podoba, to czy to dostarczone przez Andrie. Oba są łatwe i skuteczne. Wszystkie trzy rozwiązania działają dla mnie i nigdy wcześniej nie używałem 'which()'. Tak więc miło było zostać wprowadzonym w tę funkcję. – Jota
Jeśli pomaga ci zdecydować, czy użyć 'podzbioru' lub' [', spójrz na ostrzeżenie w pomocy dla' 'podzbioru': *" Jest to wygodna funkcja przeznaczona do interaktywnego użytku. Do programowania lepiej używać standardowych funkcji podsekcji takich jak [, aw szczególności nietypowa ocena podzbioru argumentów może mieć nieprzewidziane konsekwencje. "* – Andrie
@Andrie Dzięki za dodanie wyjaśnienia. – chl