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

如何将R数据框中冒号分隔的codes列转为二进制列

R数据框codes列转二进制独热编码问题

原始数据框的codes列如下:

codes
111:222:333
222
111:222

期望将其扩展为包含二进制值的独立列,格式如下:

111 222 333
1   1   1
0   1   0
1   1   0

问题分析

你尝试的代码中,unnest后丢失了原始行的对应关系,导致pivot_wider无法正确将每个codes映射回原行,从而出现重复标识的问题。解决核心是给每一行添加唯一标识,确保拆分后的codes能关联到原始行。

修正后的代码

library(tidyverse)

# 假设原始数据框为df
df <- tibble(codes = c("111:222:333", "222", "111:222"))

df_result <- df %>%
  # 添加唯一行标识
  mutate(row_id = row_number()) %>%
  # 拆分codes为字符列表
  mutate(codes = strsplit(codes, ":")) %>%
  # 展开列表
  unnest(codes) %>%
  # 标记存在的codes为1
  mutate(value = 1) %>%
  # 转换为宽表,按row_id分组,缺失值填充0
  pivot_wider(
    id_cols = row_id,
    names_from = codes,
    values_from = value,
    values_fill = 0
  ) %>%
  # 移除行标识列(按需保留)
  select(-row_id)

print(df_result)

运行后输出:

# A tibble: 3 × 3
  `111` `222` `333`
  <dbl> <dbl> <dbl>
1     1     1     1
2     0     1     0
3     1     1     0

补充说明

  • 添加row_id是关键,它确保拆分后的每个codes都能对应到原始行,避免pivot_wider时的冲突。
  • 如果原始数据框已有唯一行标识列,可直接用该列替代row_number()生成的row_id。

内容的提问来源于stack exchange,提问作者user14140004

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 12:51:15