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

如何在separate_rows()中用正则保留右括号拆分多选项数据

解决Google Forms多选地区数据拆分并保留右括号的问题

从Google Forms导出的Q11列是巴西地区多选数据,使用"), "作为分隔符,需要将每行的多选值拆分为单独行,同时保留每个地区条目的右括号)。原代码使用separate_rows(value, sep = "\\),")无法实现需求,因为会丢失右括号。

解决方案

核心是使用正则正向后顾断言匹配分隔符,确保拆分时不消耗右括号。以下提供两种可行的tidyverse方案:

方案一:改进separate_rows的正则表达式

library(tidyverse)

# 先将factor类型的Q11转为字符型(避免因子处理问题)
df <- df %>% mutate(Q11 = as.character(Q11))

# 拆分并保留右括号
final_df <- df %>%
  select(Q1, Q11) %>% # 保留需要的列(原代码包含Q1,若无需可移除)
  separate_rows(Q11, sep = "(?<=\\)), ")

正则说明

(?<=\\)), 是正向后顾断言:

  • (?<=\\)):确保当前位置的前一个字符是右括号)(需转义为\\))
  • , :匹配分隔符中的逗号和空格
    拆分时仅移除逗号和空格,完整保留前面的右括号。

方案二:使用str_split结合unnest

如果更习惯手动拆分字符串,可先生成列表列再展开:

final_df <- df %>%
  mutate(Q11 = as.character(Q11)) %>%
  select(Q1, Q11) %>%
  mutate(Q11 = str_split(Q11, "(?<=\\)), ")) %>%
  unnest(Q11)

验证结果

拆分后的Q11列将呈现为每行一个完整的地区条目,例如:

Sul (Rio Grande do Sul, Santa Catarina, Paraná)
Nordeste (Alagoas, Bahia, Ceará, Maranhão, Piauí, Pernambuco, Paraíba, Rio Grande do Norte e Sergipe)
Sudeste (Espírito Santo, Minas Gerais, Rio de Janeiro e São Paulo)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:53:23