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!
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