首页 > 解决方案 > 如何将 2 个列表的列表变成 2 个的单个列表?

问题描述

所以我有一个曲线列表,每条曲线都用 x 和 y 坐标列表表示。我想通过将所有曲线的 x 坐标和所有曲线的 y 坐标组合到一个 x 和 y 坐标列表中来制作一条长曲线。

这是一个例子,假设我有

toy <- list(list(c(1,2,3), c(4,5,6)), list(c(0,0), c(1,1)), list(c(1,2), c(1,2)))
toy

[[1]]
[[1]][[1]]
[1] 1 2 3

[[1]][[2]]
[1] 4 5 6


[[2]]
[[2]][[1]]
[1] 0 0

[[2]][[2]]
[1] 1 1


[[3]]
[[3]][[1]]
[1] 1 2

[[3]][[2]]
[1] 1 2

我怎样toy才能看起来像

[[1]]
[[1]][[1]]
[1] 1 2 3 0 0 1 2

[[1]][[2]]
[1] 4 5 6 1 1 1 2

?

标签: r

解决方案


这是一个选项transpose

library(dplyr)
library(purrr)
transpose(toy)  %>%
       map(flatten_dbl) %>%
       list
#[[1]]
#[[1]][[1]]
#[1] 1 2 3 0 0 1 2

#[[1]][[2]]
#[1] 4 5 6 1 1 1 2

或使用base R

list(lapply(asplit(t(simplify2array(toy)), 2), unlist))

推荐阅读