2010-02-12 62 views
3

我有30次數據運行,每次都存儲在一個單獨的CSV文件中,runi.csv,i = 0:29。R - 處理數據幀列表的常用方式

假設我想將它們全部收集到列表中。我知道如何做到這一點的最佳方式是

runs = list() 
for (i in 1:30) { runs[[i]] = read.csv(paste("run", i-1, ".csv")); } 

現在讓我們進一步說,每個存儲在列表中的這些數據幀具有相同的列布局和我感興趣的由「X」標識的列和由「y」標識的列。

繪製所有30次運行的(x,y)對的最簡單方法是什麼?這是我會怎麼做目前它(我覺得有必須有更好的方式):

xList = list() 
yList = list() 
for (i in 1:30) { xList[[i]] = runs[[i]]$x; yList[[i]] = runs[[i]]$y; } 
matplot(x=as.data.frame(xList), y=as.data.frame(yList)) 

這會變得更加的時候,我試圖做轉換到數據痛苦的;我無法弄清楚如何將函數應用於存儲在列表中的每個數據幀的特定列。

這裏的任何幫助將是非常有益的。

回答

3

當處理像這樣的列表時,最好使用l * ply函數(來自plyr)或lapply。

做進口的最簡單的方法可能是像這樣:

library(plyr) 
runs <- llply(paste("run",1:30,".csv",sep=""), read.csv) 

這裏有一種方法來繪製它們:

# some dummy data 
runs <- list(a=data.frame(x=1:5, y=rnorm(5)), b=data.frame(x=1:5, y=rnorm(5))) 
par(mfrow=c((length(runs)/2),2)); 
l_ply(1:length(runs), function(i) { plot(runs[[i]]$x, runs[[i]]$y) }) 

當然,你也可以輸出這個到另一個設備(例如, pdf)而不使用par()

+1

運行< - llply(膏( 「運行」,1:30, 「CSV」,月= 「」),讀出。 csv)非常漂亮 - 如果你不想加入plyr,可以和lapply一起工作。 Bravo – I82Much 2010-02-12 21:24:17

5

你可能會好得多創建一個數據幀與所有的數據。例如,在導入時添加運行編號(runs[[i]] = data.frame(read.csv(paste("run", i-1, ".csv")), Run=i)),然後執行alldata <- do.call(rbind, runs)

現在您可以使用latticeggplot2來繪製地塊。例如,要獲得所有的散點圖運行使用不同的顏色由運行做:

library(ggplot2) 
qplot(x, y, colour=Run, data=alldata, geom="point")