2015-04-04 85 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