Существует ли программный способ создания в R вложенного списка tibbles

#r #dplyr #nested #tibble #echarts

#r #dplyr #вложенный #tibble #электронные диаграммы

Вопрос:

Я новичок в R, и мне нужно создать иерархический формат данных в блестящем приложении, и, следовательно, я не могу закодировать его вручную. Предположим, у меня есть фрейм данных

  parents     labels values
1             Everything     10
2       earth       land     30
3       earth      ocean     30
4        mars     valley     40
5        mars     crater     40
6        land     forest     10
7        land      river     10
8       ocean       kelp     20
9       ocean       fish     20
10       fish      shark     10
11       fish       tuna     10
12 Everything      venus     40
13 Everything      earth     20
14 Everything       mars     30
  

создано вручную:

 df <- data.frame(parents = c("","earth", "earth", "mars", "mars", "land", "land", "ocean", "ocean", "fish", "fish", "Everything", "Everything", "Everything"),
                 labels = c("Everything", "land", "ocean", "valley", "crater", "forest", "river", "kelp", "fish", "shark", "tuna", "venus","earth", "mars"),
                 values = c(10, 30, 30, 40, 40, 10, 10, 20, 20, 10, 10, 40, 20, 30)
                 )
  

Программно созданный вложенный список tibble должен выглядеть следующим образом:

 df
# A tibble: 3 x 3
  name  value children        
  <chr> <dbl> <list>          
1 earth    30 <tibble [2 × 3]>
2 mars     40 <tibble [2 × 2]>
3 venus    30 <NULL>    
  

Я могу создать его вручную следующим образом:

 library(dplyr)
df <- tibble(
    name = c("earth", "mars", "venus"), value = c(30, 40, 30), 
    children = list(
        tibble(name = c("land", "ocean"), value = c(10,20),             # 2nd level
               children = list(
                   tibble(name = c("forest", "river"), value = c(3,7)),   # 3rd level 
                   tibble(name = c("fish", "kelp"), value = c(10,5),
                          children = list(
                              tibble(name = c("shark", "tuna"), value = c(2,6)),  # 4th level 
                              NULL  # kelp
                          ))
               )),
        tibble(name = c("crater", "valley"), value = c(20,20)),
        NULL  # venus
    )
)
  

Ручное преобразование для меня бесполезно. Обратите внимание, что я избавляюсь от верхнего слоя «Всего», что меня устраивает.
Может кто-нибудь помочь мне преобразовать его во вложенный список tibble программно?

Большое спасибо!!

Комментарии:

1. Можете ли вы показать ожидаемый результат для совместно используемых данных (входных данных)? Данные, переданные выше (ожидаемый результат), не связаны с данными ниже (ввод).

2. Посмотрите tidyr::nest , например, попробуйте tidyr::nest(df, data = -parents) .

3. @RonakShah, теперь я отредактировал свой вопрос. Спасибо!

4. @stefan — хороший краткий / лаконичный ответ, но нет — не работает.