2017-05-29 38 views
-1

例如,我有以下列表:如何加入2列出了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") 

這與一個在相應的元組B.

一個元素一個元素和列表
+1

你舉的例子還不清楚([使用'dput'(http://stackoverflow.com/questions/5963269/how-to-make-a -great-r-reproducible-example#5963610)),但是如果你有一個列表列,你可以使用'tidyr :: unnest',例如'庫(tidyverse); df < - data_frame(A = c('a','b'),B = list(1:2,3:5)); df%>%unnest()' – alistaire

回答

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" 
+0

對不起,我的意思是A和B是2個單獨的列表。我的想法是映射列表B中的向量來綁定列表A中的元素。那麼我該怎麼做呢? – leonfrank

+0

包含實際的代碼來創建您正在使用的對象以及它們位於我的答案頂部的方式會很有幫助。 – austensen

+0

@leonfrank我更新了答案以反映這種不同的數據結構 – austensen

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"