繁体   English   中英

在R中用'[]'拆分字符串向量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM