如何在R中对拼写略有差异的变量进行分类统计?
R语言中统一字符串拼写并统计类别的解决方案
针对sweets变量存在大小写、附加词汇差异的问题,可通过字符串匹配替换实现统一规范,再进行类别统计,以下是两种可行方案:
方法一:使用dplyr + stringr包(代码可读性高)
先加载所需工具包,再通过关键词匹配统一类别:
library(dplyr) library(stringr) # 原始数据 df <- data.frame(sweets= c("cookie", "CANDY", "Cookie", "cake", "IceCream", "Candy", "Chocolate COOKIE", "COOKIE", "CAKE", "Chocolate cake", "candy bar")) # 统一规范拼写 df2 <- df %>% mutate(sweets = case_when( # 检测包含cookie关键词的字符串,统一为"Cookie" str_detect(str_to_lower(sweets), "cookie") ~ "Cookie", # 检测包含candy关键词的字符串,统一为"Candy" str_detect(str_to_lower(sweets), "candy") ~ "Candy", # 检测包含cake关键词的字符串,统一为"Cake" str_detect(str_to_lower(sweets), "cake") ~ "Cake", # 单独匹配IceCream(大小写统一后判断) str_to_lower(sweets) == "icecream" ~ "IceCream", # 保留未匹配到的原始值(可选,根据需求调整) TRUE ~ sweets )) # 按类别统计 df3 <- table(df2$sweets) # 查看结果 df2 df3
方法二:基础R实现(无需额外安装包)
利用基础R的字符串处理函数完成统一:
# 原始数据 df <- data.frame(sweets= c("cookie", "CANDY", "Cookie", "cake", "IceCream", "Candy", "Chocolate COOKIE", "COOKIE", "CAKE", "Chocolate cake", "candy bar")) # 先统一转为小写,消除大小写影响 df$lower_sweets <- tolower(df$sweets) # 嵌套ifelse完成类别映射 df2 <- data.frame( sweets = ifelse(grepl("cookie", df$lower_sweets), "Cookie", ifelse(grepl("candy", df$lower_sweets), "Candy", ifelse(grepl("cake", df$lower_sweets), "Cake", ifelse(df$lower_sweets == "icecream", "IceCream", df$sweets)))) ) # 按类别统计 df3 <- table(df2$sweets) # 查看结果 df2 df3
两种方案运行后,都能得到你预期的df2和df3统计结果。
内容的提问来源于stack exchange,提问作者Moooe
相关产品推荐
相关产品推荐

