【问题标题】:Accessing Data after Splitting into Lists拆分为列表后访问数据
【发布时间】:2016-09-14 17:57:54
【问题描述】:

我认为这是一个非常初学者的问题,但是尽管尝试了很多解决方案,但搜索网络(和 SO)并没有让我找到答案。问题来了:

我有一个包含许多列的 csv 数据集,例如:yearID X Y Z。我使用以下方法阅读此内容:data<-read.csv("/foo/bar.csv") 从那里,我使用 X Y 和 Z 来计算每一行的 A:data$A<-(X+Y)/Z

现在我想绘制每年的平均 A,所以我这样做了:list_df <- split(data, data$yearID)。万岁,我可以看到,如果我执行 summary(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。理想情况下,我想最终绘制“Avg A vs YearID”。根据我发现的其他代码示例,我已经在 for 循环上尝试了许多排列,但还没有一个给我一个可行的解决方案。由于我刚刚开始学习 R,因此非常欢迎对这个过程的任何部分提出建议。

干杯, 扎克

【问题讨论】:

  • 你可以直接使用aggregate;这是一个例子:plot(aggregate(hp~cyl,mtcars,mean),col="blue",pch=19,cex=2.5)
  • 如果您可以在帖子中包含可重现的数据集示例,它可能会为您提供更多更好的答案。

标签: r csv dataframe


【解决方案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)

【讨论】:

  • 嗨@ddunn801。非常感谢,聚合应该做我想要的。作为第二个问题,你能解释一下第一行在做什么吗?我不明白 data.frame 方法的 rep 或 runif 添加。我可以复制粘贴该命令并查看它是否有效,但我也想了解该方法。
  • 您自己的项目不需要它。由于您没有向我们提供示例数据集,因此我只是使用与您描述的相同布局快速构建了一个。它所做的只是用随机数填充单元格。你可以忽略它。
猜你喜欢
  • 1970-01-01
  • 2022-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多