2012-01-17 8 views
25

Parece que mientras que grep tiene un argumento de inversión, grepl no lo hace.grepl: busca dentro de una cadena que no contiene un patrón

me gustaría subconjunto para el uso de 2 filtros

data$ID[grepl("xyx", data$ID) & data$age>60] 

¿Cómo subconjunto I para la edad> 60 e ID no contiene "xyx"? Lo que hice es

data$ID[abs(grepl("xyx", data.frame$ID)-1) & data$age>60] 

que aparentemente funciona, pero se ve horrible y poco intuitivo. ¿Hay una mejor solución/argumento?

Gracias

Respuesta

41

grepl devuelve un vector lógico. Puede usar el operador ! si quiere el resultado opuesto.

data$ID[!grepl("xyx", data$ID) & data$age>60] 
+0

Looks lovely. Gracias. – ECII

+0

De nada. ¿No te alegra que solo tengas que escribir '!' En lugar de 'invertir = TRUE' ;-) –

+0

comparado con (abs() - 1), el único '!' se ve mucho mejor ... Tal vez uno de ustedes expertos con una reputación de más de 20k puede encontrar algo de tiempo y escribir una buena reseña sobre operaciones de cuerda en R. Al igual que lo hizo joran sobre la familia * apply aquí http://stackoverflow.com/questions/3505701/r-grouping-functions-sapply-vs-lapply-vs-apply-vs-tapply-vs-by-vs-aggrega – ECII

Cuestiones relacionadas