我希望計算每行相對于所有行總數的總體百分比。但是,我的表格已按多列分組,因此百分比計算僅適用于下一組以獲得“分組百分比”。
我正在尋找全球百分比,而我在谷歌上搜索的所有內容都在詢問每組的百分比。我還沒有找到任何關于總體百分比的先前查詢。
希望有一個簡單的 dplyr 解決方案,因為這是一個非常簡單的操作,與您在 excel 資料透視圖上獲得的選項非常相似。
我嘗試過取消分組和進行更多總結,還除以重新計算的總數,但沒有運氣。
代碼:
df %>%
group_by(cat1, cat2) %>%
summarise(`Number` = n_distinct(ID)) %>%
mutate(Share = paste0(round((`Number`/sum(`Number`))*100, digits = 0), '%'))
我得到了什么:我們可以看到百分比數字是每個分組的第一列。
# cat1, cat2, Number, Share
# A D 25289 69
# A E 4853 13
# A F 6541 18
# B E 7686 100
# C F 4893 100
我在找什么:
# cat1, cat2, Number, Share
# A D 25289 51
# A E 4853 10
# A F 6541 14
# B E 7686 16
# C F 4893 10
uj5u.com熱心網友回復:
summarise只需在和之間取消組合即可mutate。
樣本資料
df <- tibble(
cat1=sample(c("A", "B", "C"), prob=c(0.5, 0.3, 0.2), replace=TRUE, size=1000),
cat2=sample(c("D", "E", "F"), replace=TRUE, size=1000),
ID=1:1000
)
解決這個問題
df %>%
group_by(cat1, cat2) %>%
summarise(Number = n_distinct(ID)) %>%
ungroup() %>%
mutate(Share = paste0(round((Number/sum(Number))*100, digits = 0), '%'))
# A tibble: 9 × 4
cat1 cat2 Number Share
<chr> <chr> <int> <chr>
1 A D 172 17%
2 A E 156 16%
3 A F 179 18%
4 B D 95 10%
5 B E 102 10%
6 B F 104 10%
7 C D 64 6%
8 C E 67 7%
9 C F 61 6%
或添加.groups="drop"到summarise通話中:
df %>%
group_by(cat1, cat2) %>%
summarise(Number = n_distinct(ID), .groups="drop") %>%
mutate(Share = paste0(round((Number/sum(Number))*100, digits = 0), '%'))
給出相同的結果。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/521654.html
上一篇:在R資料框中的每一行之后添加行
下一篇:切片資料框中的行子集
