如何在R中加入2个列表

时间:2017-05-29 22:12:22

标签: r

例如,我有以下列表:

A   B
"a" c("1","2")
"b" c("3","4","5")

其中A是字符串列表,B是字符串元组列表。 我想要以下列表:

C
c("a","1")
c("a","2")
c("b","3")
c("b","4")
c("b","5")

这是一个列表,其中A中有一个元素,B中相应元组中有一个元素。

2 个答案:

答案 0 :(得分:1)

肯定有其他方法可以做到这一点,但这是使用tidyverse工具解决此问题的方法。希望它有所帮助。

编辑:在您解释数据的结构与我原先的想法不同之后,我更新了答案。

library(dplyr)
library(tidyr)
library(purrr)

A <- list("a", "b")
B <- list(c("1","2"), c("3","4","5"))

C <- tibble(A = as_vector(A), B) %>% 
  tidyr::unnest(B) %>% 
  mutate(C = map2(A, B, ~c(.x, .y))) %>% 
  .[["C"]]

C

#> [[1]]
#> [1] "a" "1"
#> 
#> [[2]]
#> [1] "a" "2"
#> 
#> [[3]]
#> [1] "b" "3"
#> 
#> [[4]]
#> [1] "b" "4"
#> 
#> [[5]]
#> [1] "b" "5"

答案 1 :(得分:0)

我们可以使用base R

d1 <- stack(setNames(B, unlist(A)))[2:1]
d1$ind <- as.character(d1$ind)
split(unlist(d1, use.names = FALSE), 1:nrow(d1))  
#$`1`
#[1] "a" "1"

#$`2`
#[1] "a" "2"

#$`3`
#[1] "b" "3"

#$`4`
#[1] "b" "4"

#$`5`
#[1] "b" "5"