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

如何在R语言中将分隔符分隔的state列拆分为二进制1/0列

把分隔列转成0/1哑变量的R实现方案

嘿,我来帮你搞定这个需求!你现在需要把state列里用|分隔的州缩写,拆成每个州单独的列,存在就填1,不存在填0对吧?下面给你两种实用的方法,按需选择就行~

方法一:用tidyverse工具链(直观易读)

如果你平时习惯用dplyr和tidyr这类包,这个方法很适合你,步骤清晰,容易理解:

首先加载需要的包:

library(tidyverse)

然后用你的原始数据,再一步步处理:

# 你的原始数据
state <- c('ACT', 'ACT|NSW|NT|QLD|SA|VIC', 'ACT|NSW|NT|QLD|TAS|VIC|WA', 'ACT|NSW|NT|SA|TAS|VIC', 'ACT|NSW|QLD|VIC', 'ACT|NSW|SA', 'ACT|NSW|NT|QLD|TAS|VIC|WA|SA', 'NSW', 'NT', 'NT|SA', 'QLD', 'SA', 'TAS', 'VIC', 'WA')
df <- data.frame(id = 1:length(state),state)

# 核心处理代码
df_result <- df %>%
  # 把每个行里用|分隔的州拆成单独的行,每个id对应多个行(每个州一行)
  separate_rows(state, sep = "\\|") %>%
  # 给每个拆分出来的州添加一个标记值1
  mutate(value = 1) %>%
  # 把行转成列:州名作为列名,value作为值,没有的州填0
  pivot_wider(names_from = state, values_from = value, values_fill = 0)

# 查看最终结果
print(df_result)

方法二:用qdapTools包(简洁高效)

如果想要更短的代码,可以用qdapTools里的mtabulate函数,一步到位生成0/1矩阵:

先安装并加载包(如果还没装的话):

# install.packages("qdapTools")
library(qdapTools)

然后处理数据:

# 把每个state字符串拆成字符向量的列表
state_list <- strsplit(df$state, "\\|")
# 把列表转成0/1矩阵:每个元素对应一列,出现过填1,没出现填0
state_matrix <- mtabulate(state_list)
# 把矩阵和原数据合并
df_result2 <- cbind(df, state_matrix)

# 查看结果
print(df_result2)

两种方法都能得到你想要的结果:每个州作为单独的列,对应行里包含该州就显示1,否则显示0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:13:45