我看了很多帖子,所以很抱歉,这很多余,但是希望能得到一些使拼合嵌套列表扁平化的帮助:
test <- list()
test <- c(
list("A" = c(list("1"), list("2"), list("3"))),
list("B" = c(list("4"), list("5"), list("6")))
)
name subcat
1 A 1
2 A 2
3 A 3
4 B 4
5 B 5
6 B 6
我正在努力编写一个嵌套的for循环,但我真的很想使用purrr或更优雅的方法来创建一个具有两列的数据框:subcat列,以及一个重复的列,用于表示元素中每个元素的名称。清单。
任何帮助表示赞赏,甚至只是将我指向类似的帖子-谢谢!
答案 0 :(得分:1)
您可以尝试:
main
有关更新的数据:
library(purrr)
test1 <- flatten(test)
do.call(rbind.data.frame, map2(map_chr(test1, `[[`, 'name'),
map(test1, `[[`, 'subcat'), cbind))
# V1 V2
#1 A 1
#2 A 2
#3 A 3
#4 B 4
#5 B 5
#6 B 6
答案 1 :(得分:0)
library(dplyr)
library(purrr)
library(tidyr)
test %>%
as_tibble() %>% # dplyr
mutate(category = map(category, as_tibble)) %>% # purrr
unnest(cols = "category") %>% # tidyr
unnest(cols = "subcat")
# A tibble: 6 x 2
name subcat
<chr> <chr>
1 A 1
2 A 2
3 A 3
4 B 4
5 B 5
6 B 6
这种方法将列表转换为数据框,然后将列表的每个列表元素转换为数据框,然后依次取消嵌套。
答案 2 :(得分:0)
我们可以在base R
中使用stack
stack(test)[2:1]
# ind values
#1 A 1
#2 A 2
#3 A 3
#4 B 4
#5 B 5
#6 B 6
或使用unlist/data.frame
data.frame(name = rep(names(test), lengths(test)), val = unlist(test))