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

如何用separate函数正确拆分DataFrame列?保留完整样本编号

解决DataFrame列拆分问题

你需要将包含100_1-A-C-F/G格式的列拆分为样本编号(如100_1)和后续内容两列,直接用sep="_"会错误拆分样本编号里的下划线,以下是两种可行的解决方法:

方法1:使用separate结合正则表达式精准拆分

利用正则表达式匹配样本编号末尾的-作为分隔符,保留样本编号内的下划线:

library(tidyverse)

# 构造示例数据
df <- tibble(Column_A = c("100_1-A-C-F/G", "200_2-B-D-G/F"))

# 执行拆分,保留原列可移除remove=FALSE参数
df_split <- df %>%
  separate(Column_A, into = c("Column_A", "Column_B"), sep = "(?<=[0-9])-", remove = FALSE)

正则表达式(?<=[0-9])-的作用是匹配紧跟在数字之后的短横线,也就是样本编号结束的位置,确保拆分不会破坏100_1这类带下划线的编号。

方法2:使用str_split_fixed限定拆分次数

通过stringr包的str_split_fixed函数,指定仅拆分1次(生成2列结果),直接以第一个-为界拆分:

library(stringr)

# 构造示例数据
df <- tibble(Column_A = c("100_1-A-C-F/G", "200_2-B-D-G/F"))

# 拆分并赋值新列
df$Column_A_new <- str_split_fixed(df$Column_A, "-", n = 2)[, 1]
df$Column_B <- str_split_fixed(df$Column_A, "-", n = 2)[, 2]

这种方法逻辑直观,通过n=2限定拆分后只保留两部分,完美契合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 07:30:48