How can I split the following vector to list with every new element whereever an empty ''
value is encountered?
For e.g. Given the following input-
x <- c("abc", "", "a", "b", "c", "", "ab", "ac", "", "a", "a", "a",
"a", "", "b")
x
[1] "abc" "" "a" "b" "c" "" "ab" "ac" "" "a" "a" "a" "a" "" "b"
I want the following list as output
list("abc", c("a", "b", "c"), c("ab", "ac"), c("a", "a", "a",
"a"), "b")
[[1]]
[1] "abc"
[[2]]
[1] "a" "b" "c"
[[3]]
[1] "ab" "ac"
[[4]]
[1] "a" "a" "a" "a"
[[5]]
[1] "b"
CodePudding user response:
Create a logical vector based on the blank elements (i1
), get the cumulative sum on the logical vector to create group for split
ting the subset of vector (i.e. without the blanks)
i1 <- !nzchar(x)
unname(split(x[!i1], cumsum(i1)[!i1]))
-output
[[1]]
[1] "abc"
[[2]]
[1] "a" "b" "c"
[[3]]
[1] "ab" "ac"
[[4]]
[1] "a" "a" "a" "a"
[[5]]
[1] "b"