在RStudio中将120个分类合并为9个指定分类+其他的技术问询
高效合并Kickstarter数据分类的方法
嘿,我看到你正在处理Kickstarter数据集的分类合并,想用逐行循环的方式把120个分类归为9个指定分类加「其他」——其实完全不用这么麻烦!R作为向量式编程语言,有更简洁高效的方案,既省代码又跑得快,给你分享两个常用方法:
方法1:用dplyr的case_when(推荐,代码直观易读)
如果你习惯用tidyverse工具链,dplyr的case_when能帮你一行搞定分类映射:
# 先安装并加载dplyr(如果还没装的话) # install.packages("dplyr") library(dplyr) # 第一步:把你的9个指定分类列在这里 target_categories <- c("Film & Video", "Music", "Publishing", "Games", "Technology", "Art", "Design", "Food", "Crafts") # 第二步:生成新的合并后分类列 kickstarter.df <- kickstarter.df %>% mutate(main_category_merged = case_when( # 匹配到指定分类就保留原名称 main_category %in% target_categories ~ main_category, # 所有没匹配到的统一归为「其他」 TRUE ~ "其他" ))
这个逻辑很清晰:先定义好你要保留的9个分类,然后通过%in%判断每行的分类是否在目标列表里,是就留原名称,否则直接归为「其他」。
方法2:用base R的factor(无需额外安装包)
如果你不想加载第三方包,用base R的因子重编码也能实现:
# 同样先定义指定分类 target_categories <- c("Film & Video", "Music", "Publishing", "Games", "Technology", "Art", "Design", "Food", "Crafts") # 获取所有不在目标列表里的分类 other_categories <- setdiff(unique(kickstarter.df$main_category), target_categories) # 重编码分类:指定分类保留原名,其余转为「其他」 kickstarter.df$main_category_merged <- factor(kickstarter.df$main_category, levels = c(target_categories, other_categories), labels = c(target_categories, rep("其他", length(other_categories)))) # 如果需要把结果转为字符型而不是因子,再加一步: # kickstarter.df$main_category_merged <- as.character(kickstarter.df$main_category_merged)
为什么不推荐用逐行循环?
R的循环是逐行处理数据,当你的数据集行数很多时(比如几万甚至几十万行),循环的运行速度会比向量操作慢很多,而且代码冗长,后期维护也麻烦。上面的两种方法都是向量级别的操作,效率更高,代码也更简洁易读。
内容的提问来源于stack exchange,提问作者MtlDataBoy
相关产品推荐
相关产品推荐

