2016-09-14 88 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