说我有一个data.frame对象:
df <- data.frame(name=c('black','black','black','red','red'),
type=c('chair','chair','sofa','sofa','plate'),
num=c(4,5,12,4,3))
Run Code Online (Sandbox Code Playgroud)
现在我想计算每个组合的观察次数name和type.这可以这样做:
table(df[ , c("name","type")])
Run Code Online (Sandbox Code Playgroud)
或者也可能plyr,(虽然我不确定如何).
但是,如何将结果合并到原始数据框中?这样结果将如下所示:
df
# name type num count
# 1 black chair 4 2
# 2 black chair 5 2
# 3 black sofa 12 1
# 4 red sofa 4 1
# 5 red plate 3 1
Run Code Online (Sandbox Code Playgroud)
这里count现在存储从聚集的结果.
一个解决方案plyr也可能很有趣,但我希望看到这是如何用基础R完成的.
我想按列(所有者)对数据帧进行分组,并输出一个新数据帧,该数据帧在每次观察时都会计算每种类型因子的计数.真实的数据框架相当大,有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
Run Code Online (Sandbox Code Playgroud)
我一直在寻找看起来像这样的输出:
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
Run Code Online (Sandbox Code Playgroud)
融化让我在那里中途:
melted = tbl_df(melt(df, …Run Code Online (Sandbox Code Playgroud) 下面是样本表/数据框.第三个属性(count)将给出相似行的计数(attribute1 + attribute2)
?????????????????????????????????????????????????????????????????
? ID ? Attribute 1 ? Attribute 2 ? count(Attribute1+Attribute2) ?
?????????????????????????????????????????????????????????????????
? 1 ? A ? AA ? 3 ?
? 2 ? B ? CC ? 1 ?
? 3 ? C ? BB ? 2 ?
? 4 ? A ? AA ? 3 ?
? 5 ? C ? BB ? 2 ?
? 6 ? D ? AA ? 1 ?
? 7 ? B ? AA ? 1 ?
? …Run Code Online (Sandbox Code Playgroud)