2017-05-29 5 views
-1

Zum Beispiel habe ich folgende Listen:Wie beitreten 2 Listen in R

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

, in der A eine Liste von Strings ist und B ist eine Liste von Tupeln von Strings. und ich möchte, dass die auf die folgende Liste:

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

, die eine Liste mit einem Element in A und ein Element in dem entsprechenden Tupel in B.

+1

können Ihr Beispiel ist unklar ([verwenden 'dput'] (http://stackoverflow.com/questions/5963269/how-to-make-a -great-r-repearable-example # 5963610)), aber wenn Sie eine Listenspalte haben, können Sie 'tidyr :: unnest' verwenden, z 'Bibliothek (ordentlich); df <- Datenrahmen (A = c ('a', 'b'), B = Liste (1: 2, 3: 5)); df%>% unnest() ' – alistaire

Antwort

1

Es ist sicherlich noch andere Möglichkeiten, dies zu tun, aber Hier ist eine Möglichkeit, dies zu lösen mit tidyverse Tools. Ich hoffe es hilft.

EDIT: Ich aktualisierte die Antwort, nachdem Sie erklärt, dass die Daten anders strukturiert waren, als ich ursprünglich dachte.

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

Sorry, ich meine, dass A und B 2 getrennte Listen sind. Meine Idee ist, die Vektoren in Liste B zu verknüpfen, um die Elemente in Liste A zu binden. Wie kann ich das tun? – leonfrank

+0

Es wäre hilfreich, den eigentlichen Code einzufügen, um die Objekte zu erstellen, mit denen Sie arbeiten, so wie sie oben in meiner Antwort stehen. – austensen

+0

@leonfrank Ich habe die Antwort aktualisiert, um diese unterschiedliche Datenstruktur widerzuspiegeln – austensen

0

Wir 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"