求助:在R中拆分基因组数据框最后一列的双字符变异列
解决双字符变异位点列的拆分问题
嘿,我来帮你搞定这个拆分双字符变异位点列的麻烦!你之前尝试的separate参数都没找对路子,我给你两个靠谱的方案:
方案1:用separate_wider_position(最推荐)
这个函数是tidyr专门为固定宽度字符串设计的,刚好匹配你的双字符场景,用法超直观:
library(tidyr) library(dplyr) # 假设你的目标列名叫allele,拆成两列各1个字符 df <- df %>% separate_wider_position(allele, widths = c(allele1 = 1, allele2 = 1))
这里widths参数直接指定每列的宽度和新列名,完全不用纠结正则,简单粗暴解决问题。
方案2:用separate配合正确的正则
如果你非要用separate,得用正向回顾断言来匹配两个字符之间的位置,而不是瞎写分隔符:
df <- df %>% separate(allele, into = c("allele1", "allele2"), sep = "(?<=.)")
这个正则(?<=.)的意思是“匹配前面有任意一个字符的位置”,刚好能在两个字符中间拆分,不会吃掉任何字符。
为啥你之前的方法不行?
sep="":tidyr不会把空字符串当成有效分隔符,所以根本不拆分sep=".":在正则里.代表任意字符,会把每个字符都当成分隔符,导致拆分出一堆空值sep="\c":这是无效的正则表达式,R会直接报错
内容的提问来源于stack exchange,提问作者datakid
相关产品推荐
相关产品推荐

