我有一个名为dat的数据框,它有两列,如下所示
col1 col2
chr2 atagaaaaatcggctgggtgcggtggctcactcctataatcccagcactttg
chr3 atagaaaaatcggctgggtgcggtggctcactcctataatcccagcactttg
我希望能够在gtggctc的匹配项中拆分字符串,并返回一个新列,其中包含的匹配项达到指定的长度(例如,如下所示10个字符
col1 col2 new_split_col
chr2 atagaaaaatcggctgggtgcg gtggctcactcctataa
chr3 atagaaaaatcggctgggtgcg gtggctcactcctataa
我试过了
library(stringr)
dat$new_split_col <- str_split(dat$col2, "gtggctc", 2)
但它在一列中给了我两个匹配并且不包括匹配本身。它也不允许我指定所需匹配的长度。
答案 0 :(得分:2)
尝试
library(stringr)
dat[c('col2', 'new_split_col')] <- do.call(rbind,lapply(str_split(dat$col2,
perl('(?=gtggctc)'), 2), function(x) c(x[1],substr(x[2],1,17))))
或者
library(tidyr)
extract(dat, col2, into=c('col2', 'new_split_col'), '(.*)(gtggctc.{10}).*')
# col1 col2 new_split_col
#1 chr2 atagaaaaatcggctgggtgcg gtggctcactcctataa
#2 chr3 atagaaaaatcggctgggtgcg gtggctcactcctataa
或者
dat[c('col2', 'new_split_col')] <- read.table(text=gsub('(.*)(gtggctc.{10}).*',
'\\1 \\2', dat$col2))