如何将向量拆分为以特定值中断的列表

How to split a vector into list breaking at a specific value

如果遇到空 '' 值,我如何拆分以下向量以列出每个新元素?

例如给定以下输入-

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"  

我想要以下列表作为输出

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"

根据空白元素(i1)创建一个逻辑向量,获取逻辑向量的累积和以创建用于split向量子集的组(即没有空白)

i1 <- !nzchar(x)
unname(split(x[!i1], cumsum(i1)[!i1]))

-输出

[[1]]
[1] "abc"

[[2]]
[1] "a" "b" "c"

[[3]]
[1] "ab" "ac"

[[4]]
[1] "a" "a" "a" "a"

[[5]]
[1] "b"

更新 akrun 的宝贵提示:

library(dplyr)
library(tibble)
  
  as_tibble(x) %>%
    mutate(value = na_if(value, '')) %>% 
    group_by(id_Group =cumsum(is.na(value))+1) %>% 
    na.omit() %>% 
    summarise(value1 =list(value)) %>% 
    pull(value1)

[[1]]
[1] "abc"

[[2]]
[1] "a" "b" "c"

[[3]]
[1] "ab" "ac"

[[4]]
[1] "a" "a" "a" "a"

[[5]]
[1] "b"

第一个回答: 这是另一种方法:

library(dplyr)
library(tibble)

as_tibble(x) %>%
  mutate(value = na_if(value, '')) %>% 
  group_by(id_Group =cumsum(is.na(value))+1) %>% 
  na.omit() %>% 
  summarise(value1 = paste(value, collapse = " ")) %>% 
  pull(value1) %>% 
  as.list(value1)
[[1]]
[1] "abc"

[[2]]
[1] "a b c"

[[3]]
[1] "ab ac"

[[4]]
[1] "a a a a"

[[5]]
[1] "b"