Я использую RStudio
, и у меня есть dataframe
(df1
).df1
содержит несколько столбцов, но меня интересуют эти 3 столбца: compname
, dept
, losYRS
.
Я хочу получить процентное распределение каждого compname
по dept
.Мои коды R
выглядят следующим образом:
library(lubridate)
library(tidyverse)
df2<-(subset(df1,compName %in% c("A")))
df3<-df2 %>%
group_by(dept) %>%
summarise(count = n() / nrow(.) * 100 )
df3
# A tibble: 11 x 2
dept count
<chr> <dbl>
1 F&B (Kitchen) 18.6
2 F&B (Restaurant) 20.3
3 FINANCE 5.08
4 FRONT OFFICE 10.2
5 HOUSEKEEPING 22.0
6 HR 1.69
7 LEISURE AND SPORT 3.39
8 MAINTENANCE 8.47
9 RESERVATION 1.69
10 SPA 5.08
11 STEWARDING 3.39
Вместо поднабора каждый раз для каждого dept
, есть ли способ получить результаты, как показано ниже (с Grand Total
или без него):

Я также хотел бы отформатировать цифры для нулевых десятичных знаков вместе с прикрепленным знаком% (как показано выше).
Пример данных (с использованием dput):
structure(list(compName2 = c("A", "A", "C",
"B", "C", "A", "A", "B", "B",
"A", "C", "C", "A","B", "B", "A", "C", "C",
"A", "B"), dept = c("MAINTENANCE", "OPERATIONS",
"F&B (Kitchen)", "F&B (Kitchen)", "HOUSEKEEPING", "F&B (Restaurant)",
"RESERVATION", "F&B (Restaurant)", "HOUSEKEEPING", "MAINTENANCE",
"FRONT OFFICE", "HOUSEKEEPING", "MAINTENANCE", "HOUSEKEEPING",
"MAINTENANCE", "F&B (Restaurant)", "HOUSEKEEPING", "F&B (Restaurant)",
"F&B (Restaurant)", "MAINTENANCE"), losYRS = c(31, 30, 29, 28,
28, 28, 28, 27, 27, 27, 27, 27, 27, 26, 26, 26, 26, 26, 26, 25
)), .Names = c("compName", "dept", "losYRS"), row.names = c(NA,
20L), class = "data.frame")