【发布时间】:2014-11-06 20:06:03
【问题描述】:
我想按列(所有者)对数据框进行分组,并输出一个新的数据框,该数据框在每次观察时对每种类型的因子进行计数。真实的数据框比较大,有10个不同的因素。
这是一些示例输入:
library(dplyr)
df = tbl_df(data.frame(owner=c(0,0,1,1), obs1=c("quiet", "loud", "quiet", "loud"), obs2=c("loud", "loud", "quiet", "quiet")))
owner obs1 obs2
1 0 quiet loud
2 0 loud loud
3 1 quiet quiet
4 1 loud quiet
我正在寻找如下所示的输出:
out = data.frame(owner=c("0", "0", "1", "1"), observation=c("obs1", "obs2", "obs1", "obs2"), quiet=c(1, 0, 1, 2), loud=c(1, 2, 1, 0))
owner observation quiet loud
1 0 obs1 1 1
2 0 obs2 0 2
3 1 obs1 1 1
4 1 obs2 2 0
融化让我走到了一半:
melted = tbl_df(melt(df, id=c("owner")))
owner variable value
1 0 obs1 quiet
2 0 obs1 loud
3 1 obs1 quiet
4 1 obs1 loud
5 0 obs2 loud
6 0 obs2 loud
7 1 obs2 quiet
8 1 obs2 quiet
但是最后一步是什么?如果 'value' 是一个数字,我会去:
melted %>% group_by(owner, variable) %>% summarise(counts=sum(value))
非常感谢!
【问题讨论】:
-
这是一个老问题,但值得一提的是,
dcast有一个鲜为人知的功能,它允许您在这些情况下应用聚合/汇总功能。我认为它默认为计数。