Вы можете попробовать это:
1) Создание функции, которая может создать пропорцию из суммы.
myprop_tbl <- function(x){
return(round(x*100/sum(x),2))
}
2) Используя карту мурлыканья, применив функцию к фрейму данных и затем связав результат.
library(tidyverse)
tab <- mtcars %>%
group_by(cyl) %>%
summarise(vs_sum = sum(vs==0), am_sum = sum(am==1),
gear_sum = sum(gear == 4|gear==5), carb_sum= n())
finaltab <- bind_cols(tab[,1],map_df(tab[,2:length(tab)], myprop_tbl))
выход
# * cyl vs_sum am_sum gear_sum carb_sum
# <dbl> <dbl> <dbl> <dbl> <dbl>
#1 4.00 5.56 61.5 58.8 34.4
#2 6.00 16.7 23.1 29.4 21.9
#3 8.00 77.8 15.4 11.8 43.8**
EDIT:
После обсуждения с OP, кажется, он также хотел передать строку функций,
Я использую здесь пакет seplyr
tab <- mtcars %>%
group_by(cyl) %>%
summarise_se(c("vs_sum = sum(vs==0)",
"am_sum = sum(am==1)",
"gear_sum = sum(gear == 4|gear==5)",
"carb_sum = n()"))
Это также работает, но вы получите нестандартные имена, чтобы исправить это:
Это прекрасно работает как оригинальный ответ, который я отправил:
tab <- mtcars %>%
group_by(cyl) %>%
summarise_se(c("vs_sum" := "sum(vs==0)",
"am_sum" := "sum(am==1)",
"gear_sum" := "sum(gear == 4|gear==5)",
"carb_sum" := "n()"))
Вы можете прочитать это здесь @ this ссылка