2015-10-16 109 views
0

所以我來自Matlab和Python(和其他幾個相關性較低的)的背景。我爲Coursera課程選擇R。R:從CSV文件數據列表中提取數據幀

我跟着這個SO answer爲了閱讀所有我的作業文件到一行代碼列表中。我的代碼看起來像這樣:

# Get a list of files 
files = list.files(path = dataDir, pattern = '*.csv') 

# Import the file data 
setwd(dataDir) 
data = lapply(files, read.csv) 

這一切工作得很好。但是,我收到一個我不知道如何訪問的對象。之前我提到過Matlab和Python,因爲我試圖以這些語言的所有方式訪問數據。

以下是摘要輸出:

summary(data) 
     Length Class  Mode 
    [1,] 4  data.frame list 
    [2,] 4  data.frame list 
    [3,] 4  data.frame list 

實際上有他們的352不僅是3,但沒有人需要的所有352下面的列表是一個單獨的索引輸出的是什麼summary

summary(data[200]) 
    Length Class  Mode 
[1,] 4  data.frame list 

因此,如果我輸入data[200],我會列出第一批2500行數據。但data[200, 100]data[200][,100]data[200][100,]一樣會返回錯誤。 data[200][100]返回[[1]] NULL

儘管我沒有完全考慮我需要爲這個作業做些什麼,但我確信它會涉及計算各種數據列中所有非NA值的平均值/平均值/最大值/等。使用諸如mean(data[which(is.na('Col1')==F), 'Col6'])之類的測驗,這並不難。

所以我想我可以使用我需要的更噁心的版本,我只需在我需要的時候加載我需要的1個文件,只提取我需要的部分數據幀,然後循環我需要處理的所有數據文件。但是,我寧願知道如何訪問lapply行中創建的對象R中的數據。我懷疑這會使代碼更容易編寫更復雜的分析。

感謝

+2

如果你'數據[200] [100]'會發生什麼? –

+0

@CactusWoman這樣做。謝謝。你能回答這個問題嗎?我可以接受嗎? –

+1

@gabe只是想說明,它看起來像數據是data.frames的列表。您可以直接訪問列表中的項目:'data [[1]]',它將訪問列表的第一項。然後你在@CactusWoman所說的附加括號'[100,]'中選擇數據框。 – giraffehere

回答

3

當你集,單方括號[總是返回相同的類的對象爲您進行子集的對象。因此,data[200]返回包含一個數據幀的長度爲1的list,因爲data是一個列表。雙方括號[[爲您提供列表中包含的實際對象(在本例中爲數據框)。一旦你有一個數據幀,可以選擇前100行與[100,],這就是爲什麼以下工作:

data[[200]][100,]