如何在R中用多个因子对矩阵列应用函数?

时间:2013-08-20 23:05:22

标签: r aggregate apply factors tapply

这是一个简单的问题,我相信它很容易通过tapply,apply或者等来解决。但是,我还是比较新的,我想请教一下。

问题:

我有一个5列的数据框。第4和第5列是因素。对于第5列中的每个因子,我想为第5列中的每个组执行第1:3列的函数。原则上,这很容易实现。但是,我希望将输出作为一个很好的表格,我想以优雅的方式学习如何做到这一点,这就是为什么我想在这里问你。

示例:

 df <- data.frame(x1=1:6, x2=12:17, x3=3:8, y=1:2, f=1:3)

现在,命令

 by(df[,1:3], df$y, sum)

会根据y中的每个因素水平给出总和,这几乎是我想要的。需要另外两个步骤:一个是为f中的每个因子级别执行此操作。这几乎是微不足道的。我可以轻松地将lapply包裹在上面的命令周围,我会得到我想要的,除了这个:我想生成一个包含结果的表,甚至可以用它来生成热图。

因此:是否有一种简单而更优雅的方法来生成具有相应输出的矩阵?对于数据科学家来说,这似乎是一项日常工作,这就是为什么我怀疑现有的内置解决方案......

感谢任何帮助或任何提示,无论多小!

1 个答案:

答案 0 :(得分:1)

您可以使用reshape2plyr软件包来完成此任务。

library(plyr)
df2 <- ddply(df, .(y, f), sum)

然后将其变成f by y矩阵:

library(reshape2)
acast(df2, f ~ y, value.var = "V1")