2013-10-05 11 views
6

Mam ramkę danych z kolumną ID i kilkoma kolumnami dla wartości. Chciałbym zachować tylko niektóre wiersze ramki danych w zależności od tego, czy wartość identyfikatora w tym wierszu jest zgodna z innym zestawem wartości (na przykład "keep").Utrzymywanie tylko niektórych wierszy ramki danych na podstawie zestawu wartości

Dla uproszczenia, oto przykład:

df <- data.frame(ID = sample(rep(letters, each=3)), value = rnorm(n=26*3)) 
keep <- c("a", "d", "r", "x") 

Jak mogę utworzyć nową ramkę danych składającą się z wierszy, które mają tylko identyfikatory zgodnymi zachować? Mogę to zrobić dla tylko jednej litery za pomocą funkcji which(), ale z wieloma literami otrzymuję komunikaty ostrzegawcze i nieprawidłowe zwroty. Wiem, że mogłem uruchomić pętlę for przez ramkę danych i ekstrapolować w ten sposób, ale zastanawiam się, czy istnieje bardziej elegancki i skuteczny sposób radzenia sobie z tym. Z góry dziękuję.

+3

Spróbuj df [df $ ID% w% zachować,] lub podzbiór (df, ID% w% zachować) - patrz http://stat.ethz.ch/R-manual/R-devel/library/base /html/sets.html – Adrian

+1

@Adrian => answer ... –

Odpowiedz

17

Wypróbuj df[df$ID %in% keep, ] lub subset(df, ID %in% keep) - zobacz stronę pomocy dla sets.

Edycja: Także w przypadku pojedynczej litery można napisać np. df[df$ID == "a", ] zamiast używać which().

+0

Doskonale, dziękuję bardzo! Wiem o innej metodzie ekstrapolacji tylko jednej litery, ale używam metody 'which()' w całej mojej historii z R i wygląda ona ładniej syntaktycznie (jeśli to ma jakiś sens ...), więc trzymać się tego :) – user2849910

Powiązane problemy