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

R如何按分隔符拆分列,无分隔符时保留原值

问题原因

你原有代码的正则要求字符串必须包含.才能完成匹配,因此无.的行会返回NA,调整匹配规则或者使用更适配场景的拆分函数即可实现需求。


方案1:修改extract()的正则规则

将后半段匹配设置为可选即可,非捕获组(?:\\.(.*))?加?表示整个分组可出现0次或1次:

library(tidyr)
library(dplyr)

df %>%
  extract(df_col1, 
          into = c("First_col", "Second_col"), 
          regex = "^([^.]+)(?:\\.(.*))?$")

方案2:用separate()更直观实现

内置参数即可覆盖你的拆分规则,不需要手动写复杂正则:

df %>%
  separate(df_col1,
           into = c("First_col", "Second_col"),
           sep = "\\.",
           extra = "merge", # 第一个点之后的所有内容合并到第二列
           fill = "right") # 无第二个分段时,第二列自动填充空值

两种方案输出结果均和你预期一致:无.的行第一列保留完整原值、第二列为空,有.的行按第一个点拆分、后续内容全部归入第二列。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 00:54:00