分组依据()总结()和权重百分比-R
假设一家公司有3名老板和20名员工,其中每个分组依据()总结()和权重百分比-R,r,dplyr,aggregate,data-manipulation,R,Dplyr,Aggregate,Data Manipulation,假设一家公司有3名老板和20名员工,其中每个员工都完成了n_项目,总体绩效: > 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
员工
都完成了n_项目
,总体绩效
:
> 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
然而,我仍在努力解决这个问题:
df %>%
group_by(Boss) %>%
summarise(total_Projects = sum(n_Projects),
Weight_Project = n_Projects/sum(total_Projects))
除了这个问题,你能给我一些关于这个问题的反馈(特别是我的代码)或者任何提高数据操作技能的建议吗?(你可以在我的个人资料中看到,我问了很多这样的问题,但我仍然无法自己解决)我们可以得到'n_项目'和'Performance'的乘积的
和,然后除以'total_项目'
library(dplyr)
df %>%
group_by(Boss) %>%
summarise(total_projects = sum(n_Projects),
Weight_Project = sum(n_Projects * Performance)/total_projects)
# or
# Weight_Project = n_Projects %*% Performance/total_projects)
# A tibble: 3 x 3
# Boss total_projects Weight_Project
# <int> <int> <dbl>
#1 1 604 0.518
#2 2 595 0.475
#3 3 345 0.649
库(dplyr)
df%>%
分组依据(Boss)%>%
总结(总项目数=总项目数),
权重项目=总和(n个项目*绩效)/总项目)
#或
#权重项目=n个项目%*%绩效/总项目)
#一个tibble:3x3
#Boss总项目重量项目
#
#1 1 604 0.518
#2 2 595 0.475
#3 3 345 0.649
添加更多关于您所做工作和@akrun答案的详细信息:
您必须已收到以下错误消息:
df %>%
group_by(Boss) %>%
summarise(total_Projects = sum(n_Projects),
Weight_Project = n_Projects/sum(total_Projects))
## Error in summarise_impl(.data, dots) :
## Column `Weight_Project` must be length 1 (a summary value), not 7
这告诉您,您为Weight\u项目所做的演算不会为每个Boss
生成唯一的值,而是7<代码>汇总
可将多个值汇总为一个值(通过方式、总和等)。在这里,您只需将n\u项目的每个值
除以sum(total\u Projects)
,但不能将其汇总为单个值
假设您想到的是首先计算每项绩效的权重,然后将其与绩效评分相结合,得出加权平均绩效,您可以分两步进行:
df %>%
group_by(Boss) %>%
mutate(Weight_Performance = n_Projects / sum(n_Projects)) %>%
summarise(weighted_mean_performance = sum(Weight_Performance * Performance))
mutate
语句保留了df
中的总行数,但是sum(n_项目)
是根据group_by
为每个Boss
值计算的。
对于每一行,您都有一个项目权重(取决于boss),您可以使用summary
计算加权平均值-这是一个平均值,因此是一个汇总值
一种更简洁的方法仍然可以让加权演算出现:
df %>%
group_by(Boss) %>%
summarise(weighted_mean_performance = sum((n_Projects / sum(n_Projects)) * Performance))
# Reordering to minimise parenthesis, which is @akrun's answer
df %>%
group_by(Boss) %>%
summarise(weighted_mean_performance = sum(n_Projects * Performance) / sum(n_Projects))
一旦您不再需要分组,添加ungroup()
语句可以避免管道联机时出现某些模糊的错误消息,这正是我遇到的错误。谢谢你的反馈和解释,非常清楚!。
df %>%
group_by(Boss) %>%
summarise(weighted_mean_performance = sum((n_Projects / sum(n_Projects)) * Performance))
# Reordering to minimise parenthesis, which is @akrun's answer
df %>%
group_by(Boss) %>%
summarise(weighted_mean_performance = sum(n_Projects * Performance) / sum(n_Projects))