r - 通过 2 个变量聚合一个值

标签 r variables aggregate multiple-columns

我有一个看起来像这样的数据框

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/

相关文章:

r - 将一年中的日期转换为日期

java - 调用函数: two times or storing the result in a variable?哪个更好

mongodb - 比较 Jade 和 MongoDB 中的 ObjectID

django - 按 Django 中的总和排序查询,但未按预期获得结果

r - 根据代码和日期过滤数据

R cut() 导致零的奇数处理

R - 使用 rvest 包进行抓取

javascript - 如何将 js 变量放入 iframe 中

R 组按聚合

python - Pandas 聚合然后得到组平均值