2011-06-17 27 views
5

Quiero agregar una columna que contenga la cantidad de letras a-z en una columna diferente de la misma fila.R número de caracteres columna

dataset$count <-length((gregexpr('[a-z]', as.character(dataset$text))[[1]])) 

no funciona.

El resultado me gustaría acheive:

text | count 
a  | 1 
ao | 2 
ao2 | 2 
as2e | 3 
as2eA | 3 
+0

¿Puedes darnos un ejemplo, por favor? Puedo interpretar esto de muchas maneras. – Andrie

+0

Claro ... básicamente quiero contar cada letra minúscula. – Chris

Respuesta

14

Tricky:

nchar(gsub("[^a-z]","",x)) 
+0

¡Buen hack! Ciertamente mejor que 'gregexpr'. – aL3xa

1

Esto debería hacer el truco:

numchars<-function(txt){ 
    #basically your code, but to be applied to 1 item 
    tmpres<-gregexpr('[a-z]', as.character(txt))[[1]] 
    ifelse(tmpres[1]==-1, 0, length(tmpres)) 
} 
#now apply it to all items: 
dataset$count <-sapply(dataset$text, numchars) 

Otra opción es más de un enfoque de dos pasos:

charmatches<-gregexpr('[a-z]', as.character(dataset$text))[[1]] 
dataset$count<-sapply(charmatches, length) 
+0

gregexpr parece que no funciona como esperaba: – Chris

+0

gregexpr ('[az]', as.character ("AAA")) [[1]] devuelve 1 como hace gregexpr ('[az]' , como.caracter ("AAAa")) [[1]] – Chris

+0

Derecha. Para ninguna coincidencia, aparentemente gregexpr devuelve un vector con un elemento, sosteniendo -1. Edité en consecuencia (aunque la solución de @ Marek es mucho más genial) –

Cuestiones relacionadas