如果我有一些元素的列表:
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不会查找部分匹配项。
答案 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"