这是一个简单的问题,我相信它很容易通过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
包裹在上面的命令周围,我会得到我想要的,除了这个:我想生成一个包含结果的表,甚至可以用它来生成热图。
因此:是否有一种简单而更优雅的方法来生成具有相应输出的矩阵?对于数据科学家来说,这似乎是一项日常工作,这就是为什么我怀疑现有的内置解决方案......
感谢任何帮助或任何提示,无论多小!
答案 0 :(得分:1)
您可以使用reshape2
和plyr
软件包来完成此任务。
library(plyr)
df2 <- ddply(df, .(y, f), sum)
然后将其变成f by y矩阵:
library(reshape2)
acast(df2, f ~ y, value.var = "V1")