使用R提取数据框wide peak boundaries列中chr后的字符/数字:解决chrX行提取返回NA的问题
tidyr::extract提取染色体编号失败的问题 我一眼就发现问题出在你写的正则表达式上啦!你原来的正则里第一个捕获组用了\\d+,这只能匹配纯数字的染色体编号,但chrX里的X是字母,自然就匹配失败返回NA了。
修正方案:调整正则表达式
把匹配染色体部分的规则改成支持字母+数字的模式,比如用([0-9Xx]+)(如果只考虑常见的数字、X/Y),或者更通用的([A-Za-z0-9]+),这样就能覆盖所有染色体编号的情况了。
修改后的代码如下:
library(tidyr) # 调整正则,第一个捕获组支持字母+数字,同时明确匹配前缀"chr" df <- extract(df, 'wide peak boundaries', into = c('chr', 'start', 'end'), 'chr([A-Za-z0-9]+):(\\d+)-(\\d+)', remove = F, convert = T)
运行后的结果
执行后,chrX的行就能正确提取了:
df
Group Direction cytoband q value residual q value wide peak boundaries chr start end
V29 All DEL 11q25 7.78E-43 2.22E-39 chr11:130906630-135086622 11 130906630 135086622
V30 All DEL Xp22.11 3.01E-38 1.91E-35 chrX:23277186-26139553 X 23277186 26139553
V31 All DEL 10q23.31 3.61E-31 3.61E-31 chr10:87745632-87859602 10 87745632 87859602
V32 All DEL 22q12.3 4.03E-25 3.96E-25 chr22:33050952-34766503 22 33050952 34766503
V33 All DEL 11p15.4 6.59E-25 6.59E-25 chr11:3230287-3799554 11 3230287 3799554
额外说明
如果你还需要支持Y、M(线粒体)这类染色体,这个正则也能完美适配,因为[A-Za-z0-9]+会匹配任何字母和数字的组合。
内容的提问来源于stack exchange,提问作者Lin Caijin

