显然,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)
我们可以用
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)