varias superponer studio lineas histogramas graficos graficas r loops

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