Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
分组依据()总结()和权重百分比-R_R_Dplyr_Aggregate_Data Manipulation - Fatal编程技术网

分组依据()总结()和权重百分比-R

分组依据()总结()和权重百分比-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

假设一家公司有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(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))