R语言:按分组独立获取各分类变量的最频繁因子水平
按分组独立获取每个分类变量的最频繁值(R语言)
你需要按population分组后,独立统计每个变量(var1/var2/var3)的最频繁取值,而非变量组合的频次。你之前的代码用count(population, var1, var2, var3)统计的是三个变量的组合出现次数,所以得到的是组合的最常见结果,不符合需求。
解决方案
首先定义一个获取向量最频繁值的函数:
get_mode <- function(x) { freq_table <- table(x) names(freq_table)[which.max(freq_table)] }
然后结合dplyr的分组和批量汇总功能实现需求:
library(dplyr) # 你的原始数据框 df <- data.frame( population = c(rep("A", 3), rep("B", 5), rep("C", 2)), var1 = c(rep("apple", 5), rep("banana", 5)), var2 = c(rep("blue", 2), rep("red", 4), rep("green", 4)), var3 = c(rep("pizza", 7), rep("soup", 3)) ) # 分组后独立计算每个变量的最频繁值 result <- df %>% group_by(population) %>% summarise(across(c(var1, var2, var3), get_mode)) print(result)
输出结果
# A tibble: 3 × 4 population var1 var2 var3 <chr> <chr> <chr> <chr> 1 A apple blue pizza 2 B banana red pizza 3 C banana green soup
代码说明
get_mode函数:通过table()统计每个值的出现频次,再用which.max()找到频次最高的值对应的名称。across(c(var1, var2, var3), get_mode):批量对指定变量应用get_mode函数,每个变量在分组内独立计算,而非组合统计。- 如果后续变量数量增加,只需修改
across里的变量列表即可,无需逐个写变量名。
内容的提问来源于stack exchange,提问作者nrcombs
相关产品推荐
相关产品推荐

