Digamos que tenía una lista de marcos de datos:
DF1 <- data.frame(mtcars)
DF2 <- data.frame(mtcars*2)
mydatalist <-list(DF1,DF2)
¿Cómo aplicaría una función en todas las columnas?en una lista, y devolver una lista de los resultados? Por ejemplo, digamos que quiero extraer el primer número de la columna qsec (la séptima). Puedo llamarlo fácilmente para el primer artículo:
mydatalist[[1]][7]
Pero digamos que quería ver toda la columna 7 para cada elemento de la lista (tanto DF1 como DF2). ¿Cómo llamaría a eso?
Esto no funciona:
mydatalist[[]][7]
Error in mydatalist[[]] : invalid subscript type "symbol"
Mi propósito es que quiero aplicar una función a eso, digamos substr:
lapply(mydatalist[[1]][7],substr,0,2)
lapply(mydatalist[[2]][7],substr,0,2)
Pero esto no funciona:
lapply(mydatalist[[]][7],substr,0,2)
¿Cómo lo hago?
¡Gracias!
Respuestas
4 para la respuesta № 1Para obtener solo la séptima columna de cada marco de datos en la lista, puede usar
lapply(mydatalist, "[", 7) ## you can also get multiple columns with c(1,5,etc)
para la columna como marco de datos, y
lapply(mydatalist, "[[", 7)
para verlo como un vector. Para referirse a ellos / ellos por su nombre, puede usar el nombre como lo haría con el número de columna
lapply(mydatalist, "[", "qsec")
Usar substr
en la columna, primero tienes que acceder a la columna. Luego puede aplicar una función anónima para hacer el trabajo con substr
.
lapply(mydatalist, function(x) substr(x[[7]], 0, 2)) ## or x[["qsec"]]
# [[1]]
# [1] "16" "17" "18" "19" "17" "20" "15" "20" "22" "18"
# [11] "18" "17" "17" "18" "17" "17" "17" "19" "18" "19"
# [21] "20" "16" "17" "15" "17" "18" "16" "16" "14" "15"
# [31] "14" "18"
#
# [[2]]
# [1] "32" "34" "37" "38" "34" "40" "31" "40" "45" "36"
# [11] "37" "34" "35" "36" "35" "35" "34" "38" "37" "39"
# [21] "40" "33" "34" "30" "34" "37" "33" "33" "29" "31"
# [31] "29" "37"