/ / R Как да се позова на colunm в списък с рамки за данни? И след това да използвате lapply? - r, списък, substr, lapply

R Как да посоча colunm в списък с dataframes? И след това използвайте lapply? - r, списък, подстр., прегъване

Кажете, че имам списък с рамки за данни:

DF1 <- data.frame(mtcars)
DF2 <- data.frame(mtcars*2)
mydatalist <-list(DF1,DF2)

Как да приложа функция на всички колонив списък и да върнете списък с резултатите? Например, кажете, че искам да извлека първото число на колоната qsec (седмата). Лесно мога да го извикам за първия елемент:

mydatalist[[1]][7]

Но кажете, че исках да разгледам всички колони 7 за всеки елемент от списъка (и DF1, и DF2). Как бих го нарекъл?

Това не работи:

 mydatalist[[]][7]
Error in mydatalist[[]] : invalid subscript type "symbol"

Моята цел е, че искам да прилагам функция към това, да кажа substr:

lapply(mydatalist[[1]][7],substr,0,2)
lapply(mydatalist[[2]][7],substr,0,2)

Но това не работи:

lapply(mydatalist[[]][7],substr,0,2)

Как го правя?

Благодаря!

Отговори:

4 за отговор № 1

За да получите само 7-ма колона на всеки кадър с данни в списъка, можете да използвате

lapply(mydatalist, "[", 7)  ## you can also get multiple columns with c(1,5,etc)

за колоната като рамка от данни и

lapply(mydatalist, "[[", 7)

за да го видите като вектор. За да го посочите по име, можете да използвате името точно както бихте посочили номера на колоната

lapply(mydatalist, "[", "qsec")

Да използвам substr в колоната, първо трябва да получите достъп до колоната. След това кандидатствате можете да използвате анонимна функция, за да свършите работата с 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"