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

如何在tidyverse中拆分多值颜色列并生成哑变量列

当然有!在tidyverse里可以通过几个函数的组合轻松实现这个需求,而且你已经准备好完整的颜色列表df_colors,这刚好能帮我们确保所有颜色都被纳入结果中(哪怕某些颜色在原始数据里没出现,这在业务场景里非常实用)。

实现步骤与代码

我们的核心思路是:先把分隔的颜色拆分为多行,再补全每个item对应的所有颜色,最后转换为宽格式的二进制矩阵。

library(tidyverse)

# 1. 拆分颜色列为单行,同时标记存在的颜色为1
df_split <- df %>%
  separate_rows(colors, sep = " / ") %>%
  mutate(value = 1L)

# 2. 补全每个item的所有颜色(从df_colors获取),缺失的颜色填0,再转宽格式
df_result <- df_split %>%
  complete(item, colors = df_colors$color, fill = list(value = 0L)) %>%
  pivot_wider(names_from = colors, values_from = value)

# 验证结果是否和期望一致
all_equal(df_result, df_desired)
#> [1] TRUE

函数解释

  • separate_rows():把colors列中用" / "分隔的字符串拆分成单独的行,每个颜色对应一行;
  • complete():强制每个item都匹配df_colors里的所有颜色,缺失的组合会自动生成行,fill参数指定这些缺失行的value为0;
  • pivot_wider():把长格式数据转换为宽格式,颜色名称作为列名,value列的1/0作为单元格值。

这个方法在颜色数量很多的业务场景下依然高效,因为tidyverse的这些函数都是针对数据处理优化过的。

内容的提问来源于stack exchange,提问作者Jeremy K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 22:07:31