使用带有多个定界符的 strsplit
Use strsplit with multiple delimiters
我怎么拆分这个
Chr3:153922357-153944632(-)
Chr11:70010183-70015411(-)
到
Chr3 153922357 153944632 -
Chr11 70010183 70015411 -
我试过strsplit(df$V1,"[[:punct:]]"))
,但负号没有出现在最终结果中
问题是 -
既是您要提取的字符又是定界符。最好的办法是使用捕获组并指定完整的正则表达式字符串:
stringr::str_match(x, "^(.{4}):(\d+)-(\d+)\((.)\)$")
编辑:如果您想让第一个捕获组捕获任意长度的字符串(例如,任何 X 的 ChrX),您可以将第一个捕获组从 .{4}
更改为 Chr\d+
。
使用 stringsplit
和 gsub
在 base R 中如何:
# 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" "-"
这应该也适用于其他染色体名称和正链特征。
您也可以尝试 str_split
来自 stringr
:
library(stringr)
lapply(str_split(df$V1, "(?<!\()\-|[:\)\(]"), function(x) x[x != ""])
结果:
[[1]]
[1] "Chr3" "153922357" "153944632" "-"
[[2]]
[1] "Chr11" "70010183" "70015411" "-"
数据:
df = read.table(text = " Chr3:153922357-153944632(-)
Chr11:70010183-70015411(-) ")
我怎么拆分这个
Chr3:153922357-153944632(-)
Chr11:70010183-70015411(-)
到
Chr3 153922357 153944632 -
Chr11 70010183 70015411 -
我试过strsplit(df$V1,"[[:punct:]]"))
,但负号没有出现在最终结果中
问题是 -
既是您要提取的字符又是定界符。最好的办法是使用捕获组并指定完整的正则表达式字符串:
stringr::str_match(x, "^(.{4}):(\d+)-(\d+)\((.)\)$")
编辑:如果您想让第一个捕获组捕获任意长度的字符串(例如,任何 X 的 ChrX),您可以将第一个捕获组从 .{4}
更改为 Chr\d+
。
使用 stringsplit
和 gsub
在 base R 中如何:
# 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" "-"
这应该也适用于其他染色体名称和正链特征。
您也可以尝试 str_split
来自 stringr
:
library(stringr)
lapply(str_split(df$V1, "(?<!\()\-|[:\)\(]"), function(x) x[x != ""])
结果:
[[1]]
[1] "Chr3" "153922357" "153944632" "-"
[[2]]
[1] "Chr11" "70010183" "70015411" "-"
数据:
df = read.table(text = " Chr3:153922357-153944632(-)
Chr11:70010183-70015411(-) ")