0

这是一个简单的问题,我相信它可以通过 tapply、apply 或 by 等轻松解决。但是,我对此还比较陌生,我想请教一下。

问题:

我有一个包含 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上面的命令,我会得到我想要的,除了这个:我想生成一个带有结果的表格,甚至可以用它来生成一个热图。

因此:是否有一种简单且更优雅的方法来执行此操作并生成具有相应输出的矩阵?这似乎是数据科学家的日常任务,这就是为什么我怀疑有一个现有的内置解决方案......

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

4

1 回答 1

1

您可以使用reshape2plyr包来完成此操作。

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

然后将它变成 af by y 矩阵:

library(reshape2)
acast(df2, f ~ y, value.var = "V1")
于 2013-08-20T23:27:12.383 回答