/ / R ¿Cómo puedo hacer referencia a una columna dentro de una lista de data.frames? ¿Y luego usar lapply? - r, list, substr, lapply

R ¿Cómo puedo hacer referencia a una columna dentro de una lista de data.frames? ¿Y luego usar lapply? - r, list, substr, lapply

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 № 1

Para 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"