我有一个看起来像这样的数据框
AgeBracket No of People No of Jobs
18-25 2 5
18-25 2 2
26-34 4 6
35-44 4 0
26-34 2 3
35-44 1 7
45-54 3 2
由此我想聚合数据,使其看起来像下面这样:
AgeBracket 1Person 2People 3People 4People
18-25 0 3.5 0 0
26-34 0 3 0 6
35-44 7 0 0 0
45-54 0 0 2 0
Y 轴是年龄段,X 轴(第一行)是人数,而在单元格中显示的是该年龄段的平均工作数量和人数。
我认为这与聚合有关,但在任何网站上都找不到与此类似的内容。
最佳答案
这是一个使用 dcast
的 data.table 方法。
library(data.table)
setnames(dcast(df, AgeBracket ~ People, value.var="Jobs", fun.aggregate=mean, fill=0),
c("AgeBracket", paste0(sort(unique(df$People)), "Person")))[]
在这里,dcast
进行了广泛的 reshape ,将人员作为单独的变量。 fun.aggregate 用于计算 ageBracket-person 单元格中的平均工作数量。填充设置为 0。
setnames
用于重命名变量,因为默认值为整数值。最后的[]
用于打印结果。
AgeBracket 1Person 2Person 3Person 4Person
1: 18-25 0 3.5 0 0
2: 26-34 0 3.0 0 6
3: 35-44 7 0.0 0 0
4: 45-54 0 0.0 2 0
这可以分成两行,这可能更具可读性。
# reshape wide and calculate means
df.wide <- dcast(df, AgeBracket ~ People, value.var="Jobs", fun.aggregate=mean, fill=0)
# rename variables
setnames(df.wide, c("AgeBracket", paste0(names(df.wide)[-1], "Person")))
关于r - 通过 2 个变量聚合一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43870434/