如何用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 Name | Last Name | Job Title | Company Name | City | State | Phone Number | Email Address |
|---|---|---|---|---|---|---|---|
| Jon | Doe | Managing Director | My Company | Elk View | IL | (312) 726-1578 | email5@email.com |
内容的提问来源于stack exchange,提问作者DeduciveR
相关产品推荐
相关产品推荐

