[英]Split a string vector with ' [ ] ' in R
我有一个像这样的字符串:
nw.str <- "[D][A|D][T|A:D][C|T]"
我需要以这种方式拆分它:
"[D]" "[A|D]" "[T|A:D]" "[C|T]"
您可以使用strsplit
和零宽度断言在base
R中执行此操作(它们匹配字符但不使用它们 )。 基本上我们寻找紧密的括号,然后是开括号和开括号,然后是紧密的括号,并在它们之间分开....
strsplit( x , "(?<=\\])(?=\\[)" , perl = TRUE )
#[[1]]
#[1] "[D]" "[A|D]" "[T|A:D]" "[C|T]"
这里我使用stringr::str_replace_all
在值之间插入一个空格。 然后将该字符串拆分到空格处。
> library(stringr)
> s <- str_replace_all(nw.str, fixed("]["), fixed("] ["))
> strsplit(s, " ")[[1]] ## or unlist(strsplit(...))
# [1] "[D]" "[A|D]" "[T|A:D]" "[C|T]"
使用base R的另一种方式(有很多),
> g <- gsub("][", "] [", nw.str, fixed = TRUE)
> unlist(strsplit(g, " "))
使用strapplyc
包中的strapplyc,我们指定要提取的内容(而不是我们想要分割的内容)。
在这种情况下,我们想要提取左方括号"\\\\["
后跟任何".*?"
(但是最短的东西,而不是问号所示的最长的东西),然后是右方形的brakcet "\\\\]"
。
library(gsubfn)
strapplyc(nw.str, "\\[.*?\\]")[[1]]
赠送:
[1] "[D]" "[A|D]" "[T|A:D]" "[C|T]"
一个qdap方法:
library(qdap)
bracketXtract(nw.str, with=TRUE)
## all1 all2 all3 all4
## "[D]" "[A|D]" "[T|A:D]" "[C|T]"
这是使用strsplit
的方法:
splitted <- strsplit(nw.str,"][", fixed=TRUE)[[1]]
splitted[[1]] <- paste(splitted[[1]], "]", sep="")
splitted[2:length(splitted)-1] <- paste("[", splitted[2:length(splitted)-1], "]", sep="")
splitted[[length(splitted)]] <- paste("[", splitted[[length(splitted)]], sep="")
splitted
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.