2010-04-02 7 views
7

Supposons que j'ai un dataframe comme celui-ci:Sélectionnez sous-ensemble de dataframe par ids non uniques

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

et un vecteur avec ids comme celui-ci:

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

Comment puis-je sélectionner les lignes de l'élément de données qui correspondent aux ID dans v? Je ne peux pas utiliser la colonne id pour les noms de famille car ils ne sont pas uniques. Lorsque je tente, je reçois:

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’ 

Répondre

11

Cela devrait faire ce que vous voulez:

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

vous battre de 30 secondes. :) – Shane

+0

clairement ce qui est nécessaire sur SO est une horloge handicap pour les experts, disons 45 secondes ou plus vos réponses à s'asseoir sur le serveur avant de poster - même si la plupart du temps, même cela ne m'aidera pas. :) – doug

+0

génial. +1 pour les deux – amarillion

15

Utilisez

df[df$id %in% v,] 
Questions connexes