如何基于两种不同分隔符拆分FileName字段并提取生成多列数据
解答
你之前的代码存在几个问题:
strsplit()返回的是列表结构,无法直接传入第二个strsplit()做二次拆分- 正则匹配中
.属于元字符,会匹配任意单字符,要匹配真实的点分隔符需要转义为\\. - 手动通过
[[索引]]逐个提取列表值可以实现需求,但代码冗余,tidyverse有更简洁的内置函数可以一步完成拆分
你可以直接使用tidyr的separate函数,指定分隔符为下划线或点,一次拆分出所有需要的字段,代码如下:
首先加载依赖包:
library(tidyverse)
核心处理代码:
result <- file %>% # remove = FALSE 保留原始FileName列,sep参数用正则匹配下划线或点作为分隔符 separate(FileName, into = c("ID", "Name", "BioType", "FileNo", "Extension"), sep = "_|\\.", remove = FALSE) %>% # 调整列顺序和期望输出一致 select(FileName, Date, ID, Name, BioType, FileNo, Extension)
如果使用的是tidyr 1.2.0及以上版本,也可以用更易维护的separate_wider_delim分步拆分,适配更复杂的文件名格式:
result <- file %>% separate_wider_delim(FileName, delim = "_", names = c("ID", "Name", "BioType", "tmp"), too_many = "merge") %>% separate_wider_delim(tmp, delim = ".", names = c("FileNo", "Extension")) %>% select(FileName, Date, ID, Name, BioType, FileNo, Extension)
两种方法运行后得到的结果都和你期望的输出结构完全一致。
内容的提问来源于stack exchange,提问作者machine_apprentice
相关产品推荐
相关产品推荐

