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
相关产品推荐
相关产品推荐

