2016-09-14 127 views
1

我認爲這是一個非常初學者的問題,但搜索網頁(和SO)並沒有讓我找出答案,儘管嘗試了很多解決方案。這裏的問題:拆分成列表後訪問數據

我有很多列的CSV數據集,例如:yearID XY Z.我在使用閱讀:data<-read.csv("/foo/bar.csv") 從那裏,我用XY和Z來計算每行:data$A<-(X+Y)/Z

現在我想繪製每年的平均值A,所以我這樣做:list_df <- split(data, data$yearID)。 Hooray,我可以看到如果我做總結(list_df [[5]]),我會看到X Y Z和A的第五年總結。

這裏就是我堅持,我再試着這樣做:

for(year in list_df){ 
xy<-data.frame(mean(year$yearID, na.rm=T), mean(year$A, na.rm=T)) 
} 

這個循環「工程」(它不會引發錯誤),但什麼出來,在XY只是去年以及當年的平均水平。理想情況下,我想最終繪製「平均A和年份ID」。我已經嘗試了一些基於其他代碼示例的for循環的排列,但沒有一個還給了我一個工作解決方案。建議非常歡迎這個過程的任何部分,因爲我剛開始學習R.

乾杯, 扎克

+0

你可以直接使用'aggregate'來做到這一點;這裏是一個例子:'plot(aggregate(hp〜cyl,mtcars,mean),col =「blue」,pch = 19,cex = 2.5)' – ddunn801

+0

如果你可以在你的文章中包含一個可重現的數據集的例子,可能會讓你獲得更多更好的答案。 –

回答

1

除非你需要的資源列表拆出其他原因,你可以使用aggregate

data <- data.frame(yearId=rep(2010:2014,each=2),X=runif(10,1,100),Y=runif(10,50,150),Z=runif(10,100,200)) 
data$A <- (data$X+data$Y)/data$Z 

data2 <- aggregate(A~yearId,data,mean) 
plot(data2$yearId,data2$A) 
+0

Hi @ ddunn801。非常感謝,聚合應該做我想要的。作爲第二個問題,你能解釋第一行的內容嗎?我不明白data.frame方法的rep或runif添加。我可以複製粘貼命令並查看它是否有效,但我也想了解這種方法。 – Zach

+0

你並不需要你自己的項目。既然你沒有給我們提供一個樣本數據集,我只是用你描述的相同的佈局快速構建了一個。它所做的就是用隨機數填充單元格。你可以忽略它。 – ddunn801