2014-11-05 29 views
1

说我有dataframes的列表:R我如何引用data.frames列表中的colunm?然后用lapply?

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

为了只获取列表中的每个数据帧的第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" 
+1

@Nate这是一个很棒的R技巧。 R中的所有或几乎所有“特殊”运算符都被解析为像其他任何 – shadowtalker 2014-11-05 20:37:41

+0

@ssdecontrol一样的函数 - 我猜如果使用反引号而不是引号,它会稍快 – 2014-11-05 21:19:02

相关问题