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

如何用tidyverse的separate按多空格/制表符拆分R数据框列

R语言解决方案:用tidyverse拆分多空格分隔的单列数据

直接使用separate()函数,通过正则表达式匹配2个及以上的空白字符作为分隔符,同时保留字段内部的单个空格:

library(tidyverse)

# 原始数据框
my_df <- structure(list(value = c("Jon         Doe          Managing Director                                           My Company                                                   Elk View            IL      (312) 726-1578      email5@email.com", 
"John        Smith           Director                                                    Acme Corp                       Springfield          IA      (111) 111-1111      email1@email.com", 
"Mike          Jones           Manager              MyCo inc                                                        Jonestown        MN      (111) 111-1111      email2@email.com", 
"Dorothy       Baker          CEO                                           Our Company Inc                                              Philadelphia       PA      (111) 111-111      email3@email.com"
)), row.names = c(NA, -4L), class = c("tbl_df", "tbl", "data.frame"
))

# 执行拆分
my_df %>%
  separate(
    col = value,
    into = c(
      "First Name",
      "Last Name",
      "Job Title",
      "Company Name",
      "City",
      "State",
      "Phone Number",
      "Email Address"
    ),
    sep = "\\s{2,}",  # 核心:匹配2个及以上空白字符(空格/制表符)
    trim = TRUE,      # 自动清理字段首尾的多余空格
    fill = "right"    # 字段不足时右侧补NA,避免报错
  )

关键参数说明

  • sep = "\\s{2,}":正则表达式中,\\s匹配任意空白字符,{2,}指定至少匹配2次,这样只会拆分字段之间的多空格/制表符,不会破坏字段内部的单个空格(比如Managing Director会完整保留在Job Title列)。
  • trim = TRUE:自动去除每个拆分后字段的首尾空格,避免出现" My Company "这类脏数据。
  • fill = "right":如果某行数据的字段数量少于目标列数,会在右侧补充NA,防止拆分时抛出错误。

输出结果示例

拆分后的数据框会正确生成8列,第一行的内容如下:

First NameLast NameJob TitleCompany NameCityStatePhone NumberEmail Address
JonDoeManaging DirectorMy CompanyElk ViewIL(312) 726-1578email5@email.com

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 17:15:37