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

如何拆分数据框中含多个手机号的列?R语言实现遇问题

嘿,我来帮你搞定这个手机号拆分的问题~

你的思路方向是对的,但之前的正则表达式写得有点局限,导致没得到预期结果。我给你几种更稳妥的解决办法:

方法1:用tidyr的separate函数(最直观推荐)

这是专门用来拆分列的工具,操作简单不容易出错,先确保你装了tidyr包:

# 首次使用先安装包
install.packages("tidyr")
library(tidyr)

# 读取数据时直接把字符列保留为字符串,避免因子转换问题
bookings <- read.csv('bookings.csv', header = TRUE, stringsAsFactors = FALSE)

# 拆分set1列,按"/"分割成set3和set4,remove=FALSE可以保留原列(不需要就删掉这个参数)
bookings <- separate(bookings, col = set1, into = c("set3", "set4"), sep = "/", remove = FALSE)

方法2:用base R的strsplit

如果不想加载额外包,用基础R也能轻松搞定:

bookings <- read.csv('bookings.csv', header = TRUE, stringsAsFactors = FALSE)

# 按"/"拆分字符串,得到一个存储拆分结果的列表
split_mobiles <- strsplit(bookings$set1, "/")

# 从列表里分别提取第一个和第二个手机号,赋值给新列
bookings$set3 <- sapply(split_mobiles, `[`, 1)
bookings$set4 <- sapply(split_mobiles, `[`, 2)

修正你原来的gsub写法

如果你想继续用正则的方式,把正则改得更灵活点(不用固定10位,适配更多格式情况):

bookings <- read.csv('bookings.csv', header = TRUE, stringsAsFactors = FALSE)

# 提取"/"前面的手机号
bookings$set3 <- gsub("/.*", "", bookings$set1)
# 提取"/"后面的手机号
bookings$set4 <- gsub(".*/", "", bookings$set1)

这里/.*会匹配斜杠及后面所有内容,替换为空就得到前面的号码;.*/会匹配到最后一个斜杠的所有内容,替换为空就得到后面的号码,比固定长度的正则更可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:30:47