使用部分匹配的字符串分割向量

时间:2020-03-30 19:28:28

标签: r

如果我有一些元素的列表:

x = c('abc', 'bbc', 'cd', 'hj', 'aa', 'zz', 'd9', 'jk')

我想在每次有'a'创建一个嵌套列表时将其拆分:

[1][[1]] 'abc', 'bbc', 'cd', 'hj'
[2][[1]] 'aa', 'zz', 'd9', 'jk'

我尝试了

split(x, 'a') 

但split不会查找部分匹配项。

3 个答案:

答案 0 :(得分:2)

我们可以通过将带有grepl的子字符串'a'与逻辑向量进行匹配来创建一个组,然后通过获取不同组的累积和并将其用于split

split(x, cumsum(grepl('a', x)))
#$`1`
#[1] "abc" "bbc" "cd"  "hj" 

#$`2`
#[1] "aa" "zz" "d9" "jk"

答案 1 :(得分:2)

另一种使用split + findInterval的基本R解决方案(代码不及@akrun的答案那么短)

split(x,findInterval(seq_along(x),grep("a",x)))

这样

> split(x,findInterval(seq_along(x),grep("a",x)))
$`1`
[1] "abc" "bbc" "cd"  "hj" 

$`2`
[1] "aa" "zz" "d9" "jk"

答案 2 :(得分:2)

另一种base R可能是:

split(x, cumsum(nchar(sub("a", "", x, fixed = TRUE)) - nchar(x) != 0))

$`1`
[1] "abc" "bbc" "cd"  "hj" 

$`2`
[1] "aa" "zz" "d9" "jk"