R如何在data.frames列表中引用colunm?然后使用lapply?

Nat*_*ate 3 r list substr lapply

说我有一个数据帧列表:

DF1 <- data.frame(mtcars)
DF2 <- data.frame(mtcars*2)
mydatalist <-list(DF1,DF2)
Run Code Online (Sandbox Code Playgroud)

如何在列表中的所有列上应用函数,并返回结果列表?例如,假设我要提取qsec列的第一个数字(第7个).我可以轻松地为第一项调用它:

mydatalist[[1]][7]
Run Code Online (Sandbox Code Playgroud)

但是我想要查看列表中每个元素(DF1和DF2)的所有第7列.我怎么称呼它?

这不起作用:

 mydatalist[[]][7]
 Error in mydatalist[[]] : invalid subscript type 'symbol'
Run Code Online (Sandbox Code Playgroud)

我的目的是我想要一个函数,比如substr:

lapply(mydatalist[[1]][7],substr,0,2)
lapply(mydatalist[[2]][7],substr,0,2)
Run Code Online (Sandbox Code Playgroud)

但这不起作用:

lapply(mydatalist[[]][7],substr,0,2)
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

谢谢!

Ric*_*ven 8

要仅获取列表中每个数据框的第7列,您可以使用

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

作为数据框的列,和

lapply(mydatalist, "[[", 7)
Run Code Online (Sandbox Code Playgroud)

将其视为矢量.要按名称引用它/它们,您可以像使用列号一样使用该名称

lapply(mydatalist, "[", "qsec")
Run Code Online (Sandbox Code Playgroud)

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"
Run Code Online (Sandbox Code Playgroud)