2010-04-02 14 views
7

Załóżmy, że mam dataframe jak ten:Wybierz podzbiór dataframe przez zakaz unikalnych identyfikatorów

df <- data.frame (id = c("a", "b", "a", "c", "e", "d", "e"), n=1:7) 

oraz wektor z identyfikatorami jak ten:

v <- c("a", "b") 

Jak mogę wybrać wiersze ramki danych pasującej do identyfikatorów w v? Nie mogę użyć kolumny id dla rownames, ponieważ nie są one unikalne. Kiedy próbuję, że mam:

rownames(df) <- df[["id"]] 
Error in `row.names<-.data.frame`(`*tmp*`, value = c(1L, 2L, 1L, 3L, 5L, : 
    duplicate 'row.names' are not allowed 
In addition: Warning message: 
non-unique values when setting 'row.names': ‘a’, ‘e’ 

Odpowiedz

11

Należy to zrobić co chcesz:

ndx = which(df$id %in% v) 
df[ndx,] 
+1

pokonać przez 30 sekund. :) – Shane

+0

Wyraźnie, co jest potrzebne na SO to zegar upośledzenia dla ekspertów, powiedzmy, że około 45 sekund twoich odpowiedzi siedzi na serwerze przed publikacją - choć przez większość czasu nawet to mi nie pomoże. :) – doug

+0

niesamowite. +1 dla obu – amarillion

15

Korzystając

df[df$id %in% v,]