如何拆分
Chr3:153922357-153944632(-)
Chr11:70010183-70015411(-)
进入
Chr3 153922357 153944632 -
Chr11 70010183 70015411 -
我尝试了strsplit(df$V1,"[[:punct:]]"))
,但负号未出现在最终结果中
答案 0 :(得分:2)
问题是-
既是要提取的字符,也是分隔符。您最好的选择是使用捕获组并指定完整的正则表达式字符串:
stringr::str_match(x, "^(.{4}):(\\d+)-(\\d+)\\((.)\\)$")
编辑:如果您想让第一个捕获组捕获任意长度的字符串(例如,任何X的ChrX),您可以将第一个捕获组从.{4}
更改为Chr\\d+
。
答案 1 :(得分:2)
使用stringsplit
和gsub
:
# Your sample strings
ss <- c("Chr3:153922357-153944632(-)",
"Chr11:70010183-70015411(-)")
# Split items as list of vectors
lst <- lapply(ss, function(x)
unlist(strsplit(gsub("(.+):(\\d+)-(\\d+)\\((.)\\)", "\\1,\\2,\\3,\\4", x), ",")))
# rbind to dataframe if necessary
do.call(rbind, lst);
# [,1] [,2] [,3] [,4]
#[1,] "Chr3" "153922357" "153944632" "-"
#[2,] "Chr11" "70010183" "70015411" "-"
这也适用于其他染色体名称和正链特征。
答案 2 :(得分:1)
您还可以尝试myPromise2()
中的str_split
:
stringr
<强>结果:强>
library(stringr)
lapply(str_split(df$V1, "(?<!\\()\\-|[:\\)\\(]"), function(x) x[x != ""])
数据:强>
[[1]]
[1] "Chr3" "153922357" "153944632" "-"
[[2]]
[1] "Chr11" "70010183" "70015411" "-"