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

R语言中拆分字符长度不均的单列数据为三列的问题

解决方案

你的问题出在使用固定位置sep=-6拆分,而pack列的长度不一致(30kg是4个字符,100kg是5个字符),导致第三行的类别A被错误合并到pack列。以下是两种可靠的解决方法:

方法一:两次拆分(基于最后一个空格)

利用正则匹配最后一个空格,先拆分出pack,再拆分剩下的内容得到name和class:

library(tidyr)
library(dplyr)

dt <- dat %>%
  # 拆分最后一个空格后的内容作为pack
  separate(name, into = c('temp', 'pack'), sep = ' (?=[^ ]+$)', perl = TRUE) %>%
  # 拆分剩余内容的最后一个空格,得到name和class
  separate(temp, into = c('name', 'class'), sep = ' (?=[^ ]+$)', perl = TRUE)

运行结果:

name class   pack
1 Jhon Austin     B 100kg
2   Mick Gray     C 110kg
3     Tom Jef     A  30kg

方法二:一次性正则提取

如果你的数据格式固定(class是单个大写字母,pack是数字+kg),可以用extract函数一次性捕获三个分组:

dt <- dat %>%
  extract(name, into = c('name', 'class', 'pack'), regex = '(.+) ([A-Z]) ([0-9]+kg)')

这个正则表达式的逻辑:

  • (.+):捕获前面的姓名部分(直到最后一个大写字母前的空格)
  • ([A-Z]):捕获单个大写字母作为类别
  • ([0-9]+kg):捕获数字加kg的重量部分

运行后同样能得到你期望的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 07:03:16