R语言如何提取文本行核心品牌字段并分组汇总采购量
R 按核心品牌分组统计采购量实现方案
通过「文本清洗提取核心品牌名+分组聚合」两步即可实现需求,以下给出两种可直接运行的常用实现方式:
方法1:tidyverse 方案(日常数据处理首选)
适合已经在用dplyr做数据处理的场景,代码可读性高:
library(dplyr) library(stringr) # 构造示例原始数据集 df <- data.frame( brand = c("Bakoma Bio", "Bakoma Non Bio", "Dorritos Bio", "Dorritos Non Bio"), purchase_qty = c(2, 1, 2, 3) ) # 清洗品牌名并分组求和 stat_result <- df %>% mutate( # 正则匹配字符串末尾的" Bio"或" Non Bio"后缀,替换为空得到核心品牌名 core_brand = str_remove(brand, "\\s(Non\\s)?Bio$") ) %>% group_by(core_brand) %>% summarise(total_purchase = sum(purchase_qty), .groups = "drop")
运行后stat_result的输出完全符合预期:
core_brand total_purchase 1 Bakoma 3 2 Dorritos 5
方法2:Base R 方案(无需安装额外依赖)
不想加载第三方包时可以直接用R原生函数实现,逻辑完全一致:
# 构造示例数据集 df <- data.frame( brand = c("Bakoma Bio", "Bakoma Non Bio", "Dorritos Bio", "Dorritos Non Bio"), purchase_qty = c(2, 1, 2, 3) ) # 清洗提取核心品牌名 df$core_brand <- sub("\\s(Non\\s)?Bio$", "", df$brand) # 按核心品牌分组求和 stat_result <- aggregate(purchase_qty ~ core_brand, data = df, FUN = sum)
关键注意事项
- 正则规则必须加末尾匹配符
$:保证只删除字符串末尾的后缀,不会误删品牌名本身带有的Bio相关字符,比如品牌名Biopharm不会被错误截断。 - 如果数据里后缀存在大小写混乱(比如
bio、NON BIO),可以给正则加忽略大小写参数:tidyverse版本写法为str_remove(brand, regex("\\s(Non\\s)?Bio$", ignore_case = TRUE)),base R版本可以在sub函数里加ignore.case = TRUE参数。
内容的提问来源于stack exchange,提问作者Fendi
相关产品推荐
相关产品推荐

