Question
Je voudrais choisir des lignes en fonction des sous-ensembles de leurs noms, par exemple
Si j'ai les données suivantes:
data <- structure(c(91, 92, 108, 104, 87, 91, 91, 97, 81, 98),
.Names = c("fee-", "fi", "fo-", "fum-", "foo-", "foo1234-", "123foo-",
"fum-", "fum-", "fum-"))
Comment sélectionner les lignes correspondant à 'foo'?
à l'aide grep () ne fonctionne pas:
grep('foo', data)
retours:
integer(0)
ce que je fais mal? ou, est-il un moyen de mieux?
Merci!
La solution
Vous devez grep la propriété des noms de données, et non la propriété des valeurs.
Pour votre exemple, utilisez
> grep("foo",names(data))
[1] 5 6 7
> data[grep("foo",names(data))]
foo- foo1234- 123foo-
87 91 91
Une autre façon propre à faire est d'utiliser des trames de données.
> data <- data.frame(values=c(91, 92, 108, 104, 87, 91, 91, 97, 81, 98),
names = c("fee-", "fi", "fo-", "fum-", "foo-", "foo1234-", "123foo-",
"fum-", "fum-", "fum-"))
> data$values[grep("foo",data$names)]
[1] 87 91 91
Autres conseils
Utiliser sous-ensemble en combinaison avec des expressions régulières:
subset(your_data, regexpr("foo", your_data$your_column_to_match) > 0))
Si vous vous souciez à peu près un ensemble de données avec une colonne, je suppose que vous n'avez pas besoin de spécifier un nom de colonne ...
Philip
> grep("foo",names(data), value=T)
[1] "foo-" "foo1234-" "123foo-"
si la valeur est vraie, elle renvoie le contenu au lieu de l'indice