使用Dplyr"group_by"和"Summarize"和自定义函数计算几个组的模式

Mik*_*ike 5 r dplyr

显然,dplyr的汇总功能不包括"模式"选项.基于下面的简单数据框示例,我想确定每个"类别"组的模式或最常重复的数字.因此对于组"A",模式是22,对于"B",它是12和14,并且没有"C"的重复数字.

我在网上找到了一些函数的例子,但没有一个在组中没有重复数字的情况下解决了这个问题.是否需要自定义功能,或者某处是否有模式选项?我不想仅依赖于其模式功能的任何其他专用包.使用基础R,dplyr,整洁等组合找到优雅而简单的解决方案会很不错.

如果使用自定义函数,则在没有重复数字时,以及当存在多个同等重复数字时,它必须工作.

任何帮助将不胜感激!这似乎应该是R中的一个简单的解决方案,所以我很惊讶地发现没有简单的summarise_each(funs(mode)...选项.

如果使用自定义功能,请通过解释将其分解.我对R函数还是比较新的.

Category<-c("A","B","B","C","A","A","A","B","C","B","C","C")
Number<-c(22,12,12,8,22,22,18,14,10,14,1,3)
DF<-data.frame(Category,Number)
Run Code Online (Sandbox Code Playgroud)

akr*_*run 5

我们可以用

 Mode <- function(x) {
  ux <- unique(x)
  if(!anyDuplicated(x)){
      NA_character_ } else { 
     tbl <-   tabulate(match(x, ux))
     toString(ux[tbl==max(tbl)])
 }
}

DF %>%
   group_by(Category) %>%
   summarise(NumberMode = Mode(Number))
#  Category NumberMode
#    <fctr>      <chr>
#1        A         22
#2        B     12, 14
#3        C       <NA>
Run Code Online (Sandbox Code Playgroud)