2013-10-09 46 views
1

正如在Stackoverflow中建議的那樣,爲了存儲一些數據幀,我把它們放在一個列表中。現在,如何訪問列表中所有數據框的特定列(全部使用相同名稱)(以查找最大值)?如何訪問列表中所有數據框相同名稱的列?

list[1:25]["colname"] 

NULL

list[[1:25]]["colname"] 

"Error in list[[1:25]] : recursive indexing failed at level 3"

雖然我可以用

list[[1]]["colname"] 

我也試過c()得到一個列,但沒有奏效。

我嘗試過幾次搜索,但是找不到任何相關的東西。我不是一個真正的程序員,只是需要研究。我正在學習R(與Rstudio一起)(我已經閱讀了一些教程),所以可能我只是不知道要搜索的正確單詞。

+2

使用'lapply'與\'[\'一個作爲你的函數。 – A5C1D2H2I1M1N2O1R2T1

+0

3答案,而不是一個評論其中任何一個?!您可能需要閱讀網站的[** about **](http://stackoverflow.com/about)和[** FAQ **](http://stackoverflow.com/faq)部分以幫助您充分利用SO。如果答案確實解決了您的問題,您可能需要考慮*將其標記爲接受並/或將其標記爲已接受,以顯示問題已回答,方法是勾選合適答案旁邊的小綠色複選標記。你是**沒有義務這樣做,但它有助於保持網站清潔未解決的問題,並獎勵那些花時間解決問題的人。 –

+0

我向回答者道歉,我讀過關於FAQ的文章,並且我知道我應該注意並評論。當時我用我的數據測試答案時遇到了一些問題,經過一段時間的嘗試後,我不得不決定手動解決問題 - 之後,我完全忘記了回到這裏。也許其中一個答案可能解決了我的問題,但由於我的情況使問題沒有實際意義,所以我不能確定哪一個會成爲問題的答案。我是否應該嘗試所有答案,或者這裏的禮儀是什麼? – RandomMonitor

回答

1

如果x是你的清單,Sepal.Length是你要取最大值在列表中的所有數據集列:

x <- rep(list(iris),25) 


max(unlist(lapply(x,function(df) max(df$Sepal.Length)))) 

如果你想在每一個數據集的最大清單:

lapply(x,function(df) max(df$Sepal.Length)) 
+0

這正是我需要的,謝謝! 雖然函數(df)可以做什麼?幫助似乎不適用於此。 – RandomMonitor

+0

...它似乎創建(?)數據框的一種臨時名稱,可以用來引用列,但是到底是什麼,它是如何工作的? – RandomMonitor

+0

閱讀'?lapply'。該函數應用於列表的每個元素。直覺上你可以看到它是一個循環,每個循環的'df'被列表中的一個元素所替代。 – JT85

1

下面是使用sapply以及[[的一種可能方式。

data <- list(data.frame(a = 1:3, b = 4:6), 
      data.frame(a = 10:15, b = 40:45)) 

sapply(data, "[[", "b") 
[[1]] 
[1] 4 5 6 

[[2]] 
[1] 40 41 42 43 44 45 
+0

這讓我可以訪問數據框中的正確列,所以非常感謝,但是JT85的答案解決了我的下一個問題:如何從這些列中獲取最大值。 – RandomMonitor

0

其中一個apply家庭功能將做的伎​​倆。在這種情況下使用匿名函數列表中的每個data.frame運行,以找出第一列的值max ...

# Make some reproducible data 
set.seed(1) 
ll <- replicate(3 , as.data.frame(matrix(sample(9) , 3)) , simplify = FALSE) 
#[[1]] 
# V1 V2 V3 
#1 1 4 3 
#2 9 8 5 
#3 7 2 6 

#[[2]] 
# V1 V2 V3 
#1 4 8 5 
#2 7 2 3 
#3 6 9 1 

#[[3]] 
# V1 V2 V3 
#1 6 4 2 
#2 3 9 5 
#3 1 7 8 

# Get max value of each of the first columns - could use a quoted column name here 
lapply(ll , function(x) max(x[ , 1 ])) 
#[[1]] 
#[1] 9 

#[[2]] 
#[1] 7 

#[[3]] 
#[1] 6 
+0

似乎與JT85的答案基本相同 - 但是,引用的列名不起作用,但給出了「[.data.frame'(x,」colname「)中的錯誤:未定義的列被選中。爲什麼JT85工作中的$-reference,就像[,1]一樣,但引用的列名不是?我完全沒有得到R的不同參考做法和差異的方式。 – RandomMonitor

+0

@RandomMonitor嗯,我們同時發佈,答案不同,直到它被編輯後*我發佈了我的答案(我認爲它更清潔)。你必須拼錯你的專欄名稱?!例如嘗試'lapply(ll,函數(x)max(x ['V1']))''從我的例子。工作得很好? –

+0

(這不是一個批評,只是一個觀察。) 它確實適用於您的示例,但不適用於我的數據。難道是因爲列表中的其中一個數據框沒有所有其他列的數據框?如果是這樣,那麼爲什麼$參考工作?它給出了一個警告:「在max(df $ colname):沒有非缺少參數到max;返回-Inf」,但只是一個警告,而不是一個錯誤,所以它仍然按照我的要求去做。 – RandomMonitor

相關問題