如何按空格拆分prod_cat字符串列为多列以实现商品分类分组?
解决方案
你可以根据你的使用场景选择SQL直接拆分或R语言拆分两种方案:
方案1:SQL层面直接拆分(无需导出数据,可直接用于后续分组查询)
不同数据库的拆分语法略有差异,以下是主流数据库的实现代码:
MySQL
SELECT prod_id, pc_code, SUBSTRING_INDEX(prod_cat, ' ', 1) AS prod_cat_no, SUBSTRING_INDEX(SUBSTRING_INDEX(prod_cat, ' ', 2), ' ', -1) AS prod_sub_cat, SUBSTRING_INDEX(prod_cat, ' ', -1) AS prod_cat_root FROM markets.products;
如需永久存储拆分后的字段,可先新增3个字段再执行UPDATE更新即可。
PostgreSQL
SELECT prod_id, pc_code, (string_to_array(prod_cat, ' '))[1] AS prod_cat_no, (string_to_array(prod_cat, ' '))[2] AS prod_sub_cat, (string_to_array(prod_cat, ' '))[3] AS prod_cat_root FROM markets.products;
SQL Server
SELECT prod_id, pc_code, PARSENAME(REPLACE(prod_cat, ' ', '.'), 3) AS prod_cat_no, PARSENAME(REPLACE(prod_cat, ' ', '.'), 2) AS prod_sub_cat, PARSENAME(REPLACE(prod_cat, ' ', '.'), 1) AS prod_cat_root FROM markets.products;
拆分完成后直接按prod_cat_root分组即可得到detergent、diapers维度的统计结果。
方案2:R语言层面拆分
如果数据已经导入到R数据框中,可使用以下两种方式拆分:
tidyverse实现(代码最简洁)
library(tidyr) # df为导入的原始商品分类数据框 df_new <- df %>% separate( col = prod_cat, into = c("prod_cat_no", "prod_sub_cat", "prod_cat_root"), sep = " ", remove = FALSE # 设为TRUE可删除原prod_cat字段 )
基础R实现(无需安装第三方包)
split_result <- do.call(rbind, strsplit(df$prod_cat, " ")) colnames(split_result) <- c("prod_cat_no", "prod_sub_cat", "prod_cat_root") df_new <- cbind(df, split_result)
内容的提问来源于stack exchange,提问作者Brimr
相关产品推荐
相关产品推荐

