2017-11-11 208 views
7

REST çağrısından alınan iç içe geçmiş bir listem var. Yanıt, bir altta yatan ilişkisel veritabanından iç içe geçmiş bir liste grubunu içerir. Analizi basitleştirmek için listeyi düzleştirmek istiyorum. purrr tutorial'daki yönergeleri izlemeyi denedim, ancak işe yaramayacağım.Tidyverse araçlarını kullanarak ilişkisel bir veritabanından türetilmiş iç içe geçmiş listeleri düzleştirmenin en iyi yolu hangisidir?

Bir düzleştirilmiş çıkış arıyorum

hist1 <- list(field="type", from_string ="issue", to_string="bug") 
hist2 <- list(field="status", from_string ="open", to_string="closed") 
hist3 <- list(field="type", from_string ="bug", to_string="issue") 
issue1 <- list(id="123", created = "2017-11-08", issue_history = list(hist1, hist2)) 
issue2 <- list(id="124", created = "2017-11-10", issue_history = list(hist1, hist3)) 
issue <- list(issue1, issue2) 

Benim basitleştirilmiş girişi: Bunun scable mantığı bina en iyi yoldur

id created type from_string to_string 
123 2017-11-08 type issue  bug 
123 2017-11-08 status open   closed 
123 2017-11-10 type bug   issue 

?

(benim için) En: basittir

  • kod sorunları, yani performans ve bellek kritik unsurlar değildir milyonlarca ölçeğe gerekmez
  • korumak için tidyverse gelen

    • araçları
  • +0

    çok teşekkürler beni korumak için daha az karmaşık olacak – rgustavs

    cevap

    6

    Nate'in cevabı @ esinlenerek Başka bir çözüm: Yardım @Psidom çözümü için

    map_df(issue, as_tibble) %>% 
        mutate(issue_history = map(issue_history, as_tibble)) %>% 
        unnest() 
    
    # A tibble: 4 x 5 
    #  id created field from_string to_string 
    # <chr>  <chr> <chr>  <chr>  <chr> 
    #1 123 2017-11-08 type  issue  bug 
    #2 123 2017-11-08 status  open closed 
    #3 124 2017-11-10 type  issue  bug 
    #4 124 2017-11-10 type   bug  issue 
    
    5

    Bunu yapmanın bir yolu daha fazla purrr olduğundan emin değilsiniz, ancak çalışır.

    library(tidyverse) 
    
    map(issue, as.tibble) %>% 
        map_df(~ rowwise(.) %>% 
          mutate(issue_history = list(bind_rows(issue_history))) %>% 
          unnest()) 
    
    # A tibble: 4 x 5 
        id created field from_string to_string 
        <chr>  <chr> <chr>  <chr>  <chr> 
    1 123 2017-11-08 type  issue  bug 
    2 123 2017-11-08 status  open closed 
    3 124 2017-11-10 type  issue  bug 
    4 124 2017-11-10 type   bug  issue