如何用代码按频率合并低频次Specialisme变量?(支持DPLYR)
用dplyr合并低频次专业方向的实现方案
完全可以用dplyr的mutate函数实现需求,核心思路是先按年份分组,统计每个专业方向在当年的出现次数,再把次数不足20的统一替换为“其他”类。
dplyr实现代码示例
假设你的数据框名为df,包含Year(年份)和Specialisme(专业方向)两列:
library(dplyr) # 处理数据:按年份分组,统计频次后合并低频次类别 df_processed <- df %>% group_by(Year) %>% # 给每个专业方向添加当年的出现次数 add_count(Specialisme, name = "specialisme_count") %>% # 把次数<20的替换为"其他" mutate(Specialisme = ifelse(specialisme_count < 20, "其他", Specialisme)) %>% # 可选:删除临时计数列 select(-specialisme_count) %>% ungroup()
其他可行方法(base R)
如果不想用dplyr,也可以用base R的ave函数直接处理:
# 按年份和专业分组统计次数,替换低频次类别 df$Specialisme <- with(df, ifelse(ave(rep(1, nrow(df)), Year, Specialisme, FUN = length) < 20, "其他", Specialisme))
两种方法都能自动适配不同年份里专业方向的变化——不管当年有哪些专业、排序如何,都会只保留出现次数≥20的类别,其余合并为“其他”。
内容的提问来源于stack exchange,提问作者Yvonne
相关产品推荐
相关产品推荐

