r在for循环中使用dcast查找多列的平均值,并在新的数据帧中编译它们

时间:2016-10-02 18:28:38

标签: r dataframe reshape2 melt dcast

我有一个数据框(DF_melted),我通过融合其他数据集获得。 DF_melted数据框包含列"月"," A"," B"," C"," D", " E"" F&#34 ;.从以下使用dcast的代码中,我能够得到一个数据帧,其中包含" A"的每个组合的变量均值的值。和"月"。这一切都很好,并且符合预期。

dcast_data<-dcast(DF_Melted,
              month+A~variable,
              fun.aggregate = mean)

问题 - 在上面代码的行上,我想运行一个for循环来自动获取数据集(使用dcast),关系月+ A 月+ B 月+ C 月+ D 。我无法弄清楚如何替代&#39; A&#39; (或B,C,D)以paremetric方式。

我尝试了以下代码,其中我根据DF_melted中的列号引用了A,B,C,D,它可以工作:

for(j in seq(2,5, by=1))  #'A' is 2nd column, 'D' is 5th column
{
  dcast_data<-dcast(DF_Melted,
              month+DF_Melted[,j]~variable,
              fun.aggregate = mean)      
  FinalDF<-cbind(FinalDF,dcast_data)
}

虽然上述方法有效,但我想知道是否有更聪明的方法来执行上述操作而不参考数据框的列号?

最终我的目的是获得一个数据帧&#39; FinalDF&#39;这样我就可以用它来绘制A,B,C,D各个类别的月份v / s变量图。这样做自动重塑数据将是一个巨大的帮助。

1 个答案:

答案 0 :(得分:0)

在融化数据框列表中考虑do.call(cbind, dfList)

dfList <- lapply(c("A", "B", "C", "D"), function(i) {
    dcast(DF_Melted, month+DF_Melted[i]~variable, 
          fun.aggregate = mean)
})

FinalDF <- do.call(cbind, dfList)