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

R语言使用separate按|及周边空格拆分列的正则语法问题

R拆分含空格竖线分隔字段的实现方案

你需要的正则分隔符为\\s*\\|\\s*,同时补充fill = "right"参数即可消除缺失值填充警告,完整实现代码如下:

library(tidyverse)

# 输入数据
input <- tibble(A = c("Ae1 tt1 | Ae2 tt2", "Be1 | Be2 | Be3")) 

# 拆分实现
output <- input %>% 
  separate(
    col = A,
    into = c("B","C","D"),
    sep = "\\s*\\|\\s*",
    fill = "right"
  )

运行后得到的output和你预期的结果完全一致:

# A tibble: 2 × 3
  B       C       D    
  <chr>   <chr>   <chr>
1 Ae1 tt1 Ae2 tt2 <NA> 
2 Be1     Be2     Be3  

参数说明

  • sep = "\\s*\\|\\s*":\\s*匹配任意数量的空白字符,\\|匹配竖线本身(竖线是正则特殊字符,需加双反斜杠转义),组合后会把竖线及两侧的所有空格统一作为分隔符处理,拆分后的字段自然不会残留多余空格
  • fill = "right":指定行数不足3个拆分结果时,用NA填充右侧最后一列,消除默认的缺失值填充警告

扩展适配(可选)

如果不确定待拆分的列最多会拆出多少个字段,可通过如下代码动态生成列名,无需手动指定into参数:

max_col <- max(str_count(input$A, "\\|")) + 1
output <- input %>% 
  separate(
    col = A,
    into = paste0("col_", seq_len(max_col)),
    sep = "\\s*\\|\\s*",
    fill = "right"
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:15:09