![](/img/trans.png)
[英]group_by() and percentages: summarise() drops the columns I also need - R
[英]group_by() summarise() and weights percentages - R
假設一家公司有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
首席執行官要我計算每個老板的工作質量。 然而,他詢問具體的計算:每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))
除此問題外,您能否給我有關此問題的任何反饋(特別是我的代碼),或提供任何建議以提高數據處理技能? (您可以在個人資料中看到我提出了很多類似的問題,但仍然無法自行解決)
我們可以得到的sum
‘由和鴻溝‘total_projects’`n_Projects'和’性能的產品
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
添加有關您的操作和@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_Project
不會產生對每個唯一值Boss
,但7 summarise
有幾個值匯總為一個(由手段,資金等)。 在這里,您只是將n_Projects
的每個值n_Projects
sum(total_Projects)
,但沒有將其匯總為單個值。
假設您首先要計算每個性能的權重,然后將其與性能標記相結合以得出加權平均性能,則可以分兩步進行:
df %>%
group_by(Boss) %>%
mutate(Weight_Performance = n_Projects / sum(n_Projects)) %>%
summarise(weighted_mean_performance = sum(Weight_Performance * Performance))
mutate
語句保留df
的總行數,但是感謝group_by
為每個Boss
值計算sum(n_Projects)
。 有一次,對於每一行,你有一個項目的重量(取決於老板),就可以計算出加權平均- 這是一個平均值因此匯總值 -與summarise
。
仍然可以顯示加權演算的更緊湊的方法是:
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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.