gpt4 book ai didi

r - 使用 Dplyr "group_by"和 "Summarise"以及自定义函数来计算多个组的众数

转载 作者:行者123 更新时间:2023-12-04 09:27:48 25 4
gpt4 key购买 nike

显然 dplyr 的汇总功能不包括“模式”选项。基于下面的简单数据框示例,我想确定每组“类别”的模式或最频繁重复的数字。所以对于“A”组,众数是22,对于“B”,是12和14,“C”没有重复的数字。

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

如果使用自定义函数,则它必须在没有重复数字以及有多个相同重复数字时起作用。

任何帮助将不胜感激!这似乎应该是 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)

最佳答案

我们可以用

 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>

关于r - 使用 Dplyr "group_by"和 "Summarise"以及自定义函数来计算多个组的众数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38194729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com