web-dev-qa-db-fra.com

Créer une liste imbriquée de Tibble

J'aimerais créer une liste imbriquée dans un Tibble, de sorte que les données sont stockées plus efficacement et il est plus facile d'extraire des informations avec des sous-formes.

J'ai une colonne de 3 colonnes comme ce qui suit:

library(dplyr)

df <- tribble(
~a,~b,~c,
"a1", "b1", 1,
"a1", "b1", 2,
"a1", "b2", 1, 
"a1", "b2", 2,
)

Je voudrais convertir cela en une liste identique à celle-ci:

list(a1 = list(b1 = 1:2, b2 = 1:2))

Est-ce que quelqu'un sait comment je peux faire cela s'il vous plaît?

Merci

2
Liam Wright

Quelque chose comme ce qui suit?

library(tidyverse)

df <- tribble(
  ~a,~b,~c,
  "a1", "b1", 1,
  "a1", "b1", 2,
  "a1", "b2", 1, 
  "a1", "b2", 2,
)

df %>%
  group_by(a,b) %>% group_split() %>% map(~ list(.x$c) %>% set_names(.x$b[1])) %>% 
  unlist(recursive = F) %>% list %>% set_names(unique(df$a))

#> $a1
#> $a1$b1
#> [1] 1 2
#> 
#> $a1$b2
#> [1] 1 2
2
Paul Smith