web-dev-qa-db-fra.com

comment puis-je grep dans R?

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'?

utiliser grep () ne fonctionne pas:

 grep('foo', data)

retour:

integer(0)

qu'est-ce que je fais mal? ou, y a-t-il une meilleure façon?

Merci!

24
David LeBauer

Vous devez grep la propriété names des données, pas la propriété values.

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 simple de procéder consiste à 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
27
Alex Brown

Utilisez un 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 simplement d'un ensemble de données avec une colonne, je suppose que vous n'avez pas besoin de spécifier un nom de colonne ...

Philippe

6
Philip
> grep("foo",names(data), value=T)
[1] "foo-"     "foo1234-" "123foo-" 

si la valeur est vraie, elle renvoie le contenu au lieu de l'index

2
user1836270