2012-09-05 19 views
5

Próbuję to rozwiązać, ale nie jestem w stanie tego zrobić. Chcę pozbyć się wszystkich wierszy z wartościami "0", ale zachowując numery identyfikacyjne nienaruszone pozostałych wierszy.Jak mogę usunąć wiersze zawierające "0" pewnych kolumn, zachowując identyfikatory wierszy pozostałych wierszy w R

ID B C D 
1_2 34 42 12 
1_3 34 32 2 
1_4 0 0 0 
1_5 12 33 12 

wyjście powinno być

ID B C D 
1_2 34 42 12 
1_3 34 32 2 
1_5 12 33 12 
+1

Czy "ID" to nazwa wiersza lub kolumna w ramce danych? – seancarmody

+3

Czy chcesz usunąć wiersze, jeśli wszystkie trzy kolumny B, C i D mają wartość 0 lub jeśli przynajmniej jeden z nich ma wartość 0? –

+0

proszę o rozwiązanie dplyr, ** filtr (funkcja (z) dowolna (z! = 0), - ID) **? nie działa ... –

Odpowiedz

5

jeśli chcesz usunąć wiersze zawierające 0 lub wiele dla kolumny B, C lub D:

DF[apply(DF[c(2:4)],1,function(z) !any(z==0)),] 

lub tylko wtedy, gdy wszystkie kolumny B, C, D zawierają 0:

DF[apply(DF[c(2:4)],1,function(z) any(z!=0)),] 
+0

Dzięki! zadziałało – Gongon

+0

Mam bardzo podstawowe pytanie, ale co oznacza skrót 1? – Danka

+0

@ Danka- 1 oznacza wiersz. Jeśli zastąpisz go 2, polecenie będzie działało na kolumnach. – VGu

1

Jeśli tmp to nazwa oryginalnego data.frame, następujące prace:

tmp2 <- data.frame(Reduce(rbind,apply(tmp,1,function(x){if(any(x==0)){NULL}else{x}}))) 
Powiązane problemy