Как мне раскрутить вложенный df и использовать имя coumn как часть имени нового столбца? - PullRequest
0 голосов
/ 20 апреля 2020

Я понимаю, что мой титул, возможно, немного сбивает с толку. У меня есть JSON, который немного сбивает с толку unnest. Я пытаюсь использовать Tidyverse.

Пример данных

df <- structure(list(long_abbr = c("Team11", "BBS"), short_name = c("Ac ", 
                                                                    "BK"), division = c("", ""), name = c("AC Slaters Muscles", "Broken Bats"
                                                                    ), abbr = c("T1", "T1"), owners = list(structure(list(commissioner = 0L, 
                                                                                                                          name = "Chris Liss", id = "300144F8-79F4-11EA-8F25-9AE405472731"), class = "data.frame", row.names = 1L), 
                                                                                                           structure(list(commissioner = 1L, name = "Mark Ortin", id = "90849EF6-7427-11EA-95AA-4EEEAC7F8CD2"), class = "data.frame", row.names = 1L)), 
                     id = c("1", "2"), logged_in_team = c(NA_integer_, NA_integer_
                     )), row.names = 1:2, class = "data.frame")
                 )



# Unnest Owners Information
df <- df %>% 
  unnest(owners)

Я получаю следующую ошибку, так как у меня есть дубликаты столбцов, которые используют name.

Error: Column names `name` and `id` must not be duplicated.

Существует ли простой способ развернуть столбцы с помощью соглашения об именах, которое принимает префикс owners (или в моем случае я бы хотел, чтобы оно принимало любое имя столбца, в котором хранится вложенный df есть) перед вложенными столбцами. IE owners.commissioner, owners.name, owners.id. Я также был бы заинтересован в решениях, которые используют случай верблюда и подчеркивание. IE ownersName или owners_name.

1 Ответ

0 голосов
/ 26 апреля 2020

установить аргумент names_sep:

df <- structure(
  list(long_abbr = c("Team11", "BBS"), 
       short_name = c("Ac ", "BK"), 
       division = c("", ""), 
       name = c("AC Slaters Muscles", "Broken Bats"), 
       abbr = c("T1", "T1"), 
       owners = list(
         structure(list(commissioner = 0L, name = "Chris Liss", 
                        id = "300144F8-79F4-11EA-8F25-9AE405472731"), 
                   class = "data.frame", row.names = 1L), 
         structure(list(commissioner = 1L, name = "Mark Ortin", 
                        id = "90849EF6-7427-11EA-95AA-4EEEAC7F8CD2"), 
                   class = "data.frame", row.names = 1L)), 
       id = c("1", "2"), 
       logged_in_team = c(NA_integer_, NA_integer_)), 
  row.names = 1:2, class = "data.frame"
)

tidyr::unnest(df, owners, names_sep = "_")
#> # A tibble: 2 x 10
#>   long_abbr short_name division name  abbr  owners_commissi… owners_name
#>   <chr>     <chr>      <chr>    <chr> <chr>            <int> <chr>      
#> 1 Team11    "Ac "      ""       AC S… T1                   0 Chris Liss 
#> 2 BBS       "BK"       ""       Brok… T1                   1 Mark Ortin 
#> # … with 3 more variables: owners_id <chr>, id <chr>, logged_in_team <int>

Создано в 2020-04-26 пакетом Представить (v0.3.0)

Решает ли это вашу проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...