【发布时间】:2019-02-27 19:13:25
【问题描述】:
假设一家公司有 3 位老板和 20 位员工,其中每个Employee 完成了n_Projects,总百分比为Performance:
> df <- data.frame(Boss = sample(1:3, 20, replace=TRUE),
Employee = sample(1:20,20),
n_Projects = sample(50:100, 20, replace=TRUE),
Performance = round(sample(1:100,20,replace=TRUE)/100,2),
stringsAsFactors = FALSE)
> df
Boss Employee n_Projects Performance
1 3 8 79 0.57
2 1 3 59 0.18
3 1 11 76 0.43
4 2 5 85 0.12
5 2 2 75 0.10
6 2 9 66 0.60
7 2 19 85 0.36
8 1 20 79 0.65
9 2 17 79 0.90
10 3 14 77 0.41
11 1 1 78 0.97
12 1 7 72 0.52
13 2 6 62 0.69
14 2 10 53 0.97
15 3 16 91 0.94
16 3 4 98 0.63
17 1 18 63 0.95
18 2 15 90 0.33
19 1 12 80 0.48
20 1 13 97 0.07
CEO 让我计算每个老板的工作质量。但是,他要求进行具体计算:每个 Performance 值的权重必须等于该老板的 n_Project 值相对于总 n_Project 的权重。
例如,对于 Boss 1,我们总共有 604 个n_Projects,其中项目 1 的性能权重为 0,13(78/604 * 0,97 = 0,13),项目 3 的性能权重为 0,1 (59/604 * 0,18 = 0,02),等等。这些性能权重的总和是 Boss 性能,对于 Boss 1 来说是0,52。所以,最终的输出应该是这样的:
Boss total_Projects Performance
1 604 0.52
2 340 0.18 #the values for boss 2 are invented
3 230 0.43 #the values for boss 3 are invented
但是,我仍在为此苦苦挣扎:
df %>%
group_by(Boss) %>%
summarise(total_Projects = sum(n_Projects),
Weight_Project = n_Projects/sum(total_Projects))
除了这个问题,您能否给我任何关于这个问题(特别是我的代码)的反馈或任何改进数据操作技能的建议? (你可以在我的个人资料中看到我已经问了很多这样的问题,但我仍然无法自己解决)
【问题讨论】:
-
一旦您不再需要分组,添加
ungroup()语句可能会在您的管道继续时避免某些晦涩的错误消息
标签: r dplyr aggregate data-manipulation