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