2015-04-04 75 views
1

返回新的专栏中,我有一个名为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) 

但它给了我一个列中的两个匹配,并不包含匹配本身。它也不允许我指定所需匹配的长度。

回答

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)) 
+0

有没有让比赛和随后的字符为相同的字符串的方法吗?目前它正在将匹配和后续字符串分成两部分 – 2015-04-04 19:16:47

+0

在完成之前我写下了道歉。完善。我最后使用了stringr。谢谢 – 2015-04-04 19:31:24

+0

@ user3632206没问题。很高兴它适合你。 – akrun 2015-04-04 19:32:19