Pregunta

Me gustaría elegir filas basadas en los subconjuntos de sus nombres, por ejemplo

Si tengo los siguientes datos:

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

¿Cómo selecciono las filas que coinciden con 'foo'?

Usar grep () no funciona:

 grep('foo', data)

devoluciones:

integer(0)

¿Qué estoy haciendo mal? ¿O hay un mejor camino?

¡Gracias!

¿Fue útil?

Solución

Debe obtener la propiedad de los nombres de los datos, no la propiedad de valores.

Para su ejemplo, use

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

Otra forma limpia de hacer esto es usar marcos de datos.

> 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

Otros consejos

Use el subconjunto en combinación con expresiones regulares:

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

Si solo le importa un conjunto de datos con una columna, supongo que no necesita especificar un nombre de columna ...

Filipes

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

Si el valor es verdadero, devuelve el contenido en lugar del índice

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top