你可以试试这个:
1)创建一个可以从总和中创建比例的函数。
myprop_tbl <- function(x){
return(round(x*100/sum(x),2))
}
2)使用purrr的地图,将函数应用到数据框上,然后绑定结果。
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))
Output:
# * 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()"))
你可以在这里阅读这篇文章@thislink https://www.r-bloggers.com/programming-with-dplyr-by-using-dplyr/