如何将向量拆分为以特定值中断的列表
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"
如果遇到空 ''
值,我如何拆分以下向量以列出每个新元素?
例如给定以下输入-
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"