You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按空格拆分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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 20:24:00