2015-08-14 17 views
5

Chciałbym usunąć niektóre wiersze z mojej ramki danych. Myślę, że przy użyciu subset będzie to najłatwiejszy sposób na zrobienie tego.Jak usunąć wiersze z ramki danych na podstawie funkcji podzestawu?

Użyłem poniżej kod, aby usunąć niektóre wiersze przed:

data_selected <- subset(tbl_data, Name.x != "XXX" & Name.y != "YYY") 

pytanie brzmi jak usunąć wiersze z mojego stołu, które mają ten sam ciąg znaków w dwóch komórek (tym samym wierszu).

myślę że mtcars może być stosowany jako przykład:

     mpg cyl disp hp drat wt qsec vs am gear carb 
Mazda RX4   21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 
Mazda RX4 Wag  21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 
Datsun 710   22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 
Hornet 4 Drive  21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 
Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 

gear i carb kolumny mogą być użyte. Jak widać, dwa pierwsze wiersze powinny zostać usunięte z tych danych, ponieważ obie mają tę samą wartość 4 w tych dwóch kolumnach. Proszę wziąć na konto, że w moich danych nie mam wartości liczbowych, ale ciąg znaków.

+1

nie 'podzbiór (mtcars, bieg! = carb) 'praca – akrun

+1

odpowiedź @akrun jest tym, co chcesz. Zachowaj ostrożność w przypadku wartości nieliczbowych, ponieważ możesz mieć problemy z porównywaniem kolumn współczynników. Spróbuj użyć: podzbiór (dt, x! = Y) na dt = data.frame (x = c ("A", "B", "C"), y = c ("A", "A", "B")), a następnie na dt = data.frame (x = c ("A", "B", "C"), y = c ("A", "A", "B"), stringiAsFactors = F) – AntoniosK

Odpowiedz

3

Na podstawie informacji zawartych w poście, myślę, że porównanie (!=) między „biegu” i kolumny „węglowodanów” będzie dosyć subset zestaw danych

df1 <- mtcars[1:5,] 
subset(df1, gear!=carb) 
#      mpg cyl disp hp drat wt qsec vs am gear carb 
#Datsun 710  22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 
#Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 
#Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 

Powinno to również pracować dla „non -numeryczne kolumny, ale nie w przypadku dopasowań częściowych.

Jeśli musimy zrobić wyjątek o utrzymanie wierszy, które mają zarówno „nieznane”, możemy użyć operatora | po dodaniu inny stan logiczny (`(przekładni ==„nieznane”& węglowodanów ==„nieznane”)) do pierwotnego stanu.

dokonać pewnych zmian w zbiorze danych, aby pokazać wyjście (tylko jako przykład, wiem, że jestem zmieniając kolumny numerycznej charakterem w ten sposób)

df1$gear[4] <- 'Unknown' 
df1$carb[4] <- 'Unknown' 
df1$gear[5] <- 'Unknown' 


subset(df1, (gear=='Unknown' & carb=='Unknown') | gear!=carb) 
#     mpg cyl disp hp drat wt qsec vs am gear carb 
#Datsun 710  22.8 4 108 93 3.85 2.320 18.61 1 1  4  1 
#Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 Unknown Unknown 
#Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 Unknown  2 
+0

To było zbyt łatwe! Dzięki. Czy mogę zadać dodatkowe pytanie? Czy można tam wprowadzić wyjątek? Na przykład jeśli obie kolumny mają ciąg "Nieznany", zachowaj je. –

+1

@ShaxiLiver Mam wątpliwości, przypuśćmy, że jeśli jedna z kolumn ma "Nieznany" dla wiersza, a druga kolumna jest inna. Ale na podstawie naszego pierwszego warunku 'gear! = Carb' powinniśmy je zachować, prawda? – akrun

+0

Tak, trzymamy je. To najciekawsza sytuacja dla mnie! Działa całkiem nieźle –

Powiązane problemy