Domanda

Vorrei scegliere le righe in base ai sottoinsiemi dei loro nomi, ad esempio

Se ho i seguenti dati:

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-"))

Come si seleziona le righe corrispondenti a "foo"?

L'uso di grep () non funziona:

 grep('foo', data)

ritorna:

integer(0)

Che cosa sto facendo di sbagliato? Oppure c'è un modo migliore?

Grazie!

È stato utile?

Soluzione

È necessario assistere alla proprietà dei nomi dei dati, non alla proprietà valori.

Per il tuo esempio, usa

> grep("foo",names(data))
[1] 5 6 7
> data[grep("foo",names(data))]
  foo- foo1234-  123foo- 
  87       91       91 

Un altro modo pulito per farlo è l'utilizzo dei telai di dati.

> 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

Altri suggerimenti

Usa il sottoinsieme in combinazione con espressioni regolari:

subset(your_data, regexpr("foo", your_data$your_column_to_match) > 0))

Se ti interessa solo un set di dati con una colonna, immagino che non sia necessario specificare un nome di colonna ...

Philip

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

Se il valore è vero, restituisce il contenuto anziché l'indice

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top