2014-11-05 61 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

相關問題