J'ai une trame de données df
avec une colonne ID par exemple A
, B
, etc. J'ai également un vecteur contenant certains identifiants:
L <- c("A", "B", "E")
Comment puis-je filtrer la trame de données pour obtenir uniquement les identifiants présents dans le vecteur? Individuellement, j'utiliserais
subset(df, ID == "A")
mais comment filtrer sur un vecteur entier?
Vous pouvez utiliser l'opérateur %in%
:
> df <- data.frame(id=c(LETTERS, LETTERS), x=1:52)
> L <- c("A","B","E")
> subset(df, id %in% L)
id x
1 A 1
2 B 2
5 E 5
27 A 27
28 B 28
31 E 31
Si vos identifiants sont uniques, vous pouvez utiliser match()
:
> df <- data.frame(id=c(LETTERS), x=1:26)
> df[match(L, df$id), ]
id x
1 A 1
2 B 2
5 E 5
ou faites-en les noms de vos trames de données et extrayez-les par ligne:
> rownames(df) <- df$id
> df[L, ]
id x
A A 1
B B 2
E E 5
Enfin, pour les utilisateurs plus avancés, et si la vitesse est un problème, je recommanderais de regarder dans le package data.table
.
Je pense que vous devez utiliser "match". Il fait correspondre les valeurs d'un vecteur aux valeurs d'un autre vecteur et donne NA là où il n'y a pas de correspondance. Alors, vous sous-ensemble basé sur! Is.na du match.
Vous voyez? Match et vous pouvez probablement le faire vous-même, auquel cas vous en apprendrez plus que la réponse exacte que quelqu'un fera sous peu, ce qui vous encouragera simplement à couper et coller :)