studio - superponer graficas en r
Pasa por las columnas y agrega longitudes de cadena como nuevas columnas (4)
Con dplyr y stringr puedes usar mutate_all :
> df %>% mutate_all(funs(length = str_length(.)))
col1 col2 col1_length col2_length
1 abc adf qqwe 3 8
2 abcd d 4 1
3 a e 1 1
4 abcdefg f 7 1
Tengo un marco de datos con varias columnas y me gustaría generar una columna separada para cada una con la longitud de cada fila.
Estoy intentando iterar a través de los nombres de columna, y para cada salida de columna se adjunta una columna correspondiente con ''_length''.
Por ejemplo col1 | col2 iría a col1 | col2 | col1_length | col2_length
El código que estoy usando es:
df <- data.frame(col1 = c("abc","abcd","a","abcdefg"),col2 = c("adf qqwe","d","e","f"))
for(i in names(df)){
df$paste(i,''length'',sep="_") <- str_length(df$i)
}
Sin embargo, esto arroja un error:
función inválida en asignación compleja.
¿Puedo usar bucles de esta manera en R?
En aras de la integridad, también hay una solución data.table :
library(data.table)
result <- setDT(df)[, paste0(names(df), "_length") := lapply(.SD, stringr::str_length)]
result
# col1 col2 col1_length col2_length
#1: abc adf qqwe 3 8
#2: abcd d 4 1
#3: a e 1 1
#4: abcdefg f 7 1
Necesita usar [[ , el equivalente programático de $ . De lo contrario, por ejemplo, cuando i col1 , R buscará df$i lugar de df$col1 .
for(i in names(df)){
df[[paste(i, ''length'', sep="_")]] <- str_length(df[[i]])
}
Puede usar lapply para pasar cada columna a str_length , luego cbind a su data.frame original ...
library(stringr)
out <- lapply( df , str_length )
df <- cbind( df , out )
# col1 col2 col1 col2
#1 abc adf qqwe 3 8
#2 abcd d 4 1
#3 a e 1 1
#4 abcdefg f 7 1