удаление вложенной переменной в таблице, состоящей из вложенных списков - PullRequest
0 голосов
/ 02 октября 2018

Работая с некоторыми данными в формате JSON, у меня возникла странная структура:

suppressMessages(library(tidyverse))
df <- data_frame(y = c("D", "E"), z = list(list(a = 1, b = 2, c = 3), list(a = 4, c = 5)))

Я хочу удалить z.Это почти работает:

> unnest(df, z, .id = "name")
# A tibble: 5 x 3
  y     z          name
  <chr> <list>    <int>
1 D     <dbl [1]>     1
2 D     <dbl [1]>     1
3 D     <dbl [1]>     1
4 E     <dbl [1]>     2
5 E     <dbl [1]>     2

Но то, что я хочу, это что-то вроде:

# A tibble: 5 x 3
  y         z name 
  <chr> <dbl> <chr>
1 D         1 a    
2 D         2 b    
3 D         3 c    
4 E         4 a    
5 E         5 c    

Как мне избежать потери информации об имени и выскакивать значения для z?

Спасибо @AntoniosK за решение моей проблемы.Вот его (слегка отредактированное) решение:

df %>%
  mutate(d = map(z, ~data.frame(.x) %>% gather(name, z))) %>%
  unnest(d)

# # A tibble: 5 x 3
#   y     name      z
#   <chr> <chr> <dbl>
# 1 D     a         1
# 2 D     b         2
# 3 D     c         3
# 4 E     a         4
# 5 E     c         5

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Спасибо @AntoniosK за решение моей проблемы.Вот его (слегка отредактированное) решение:

df %>%
  mutate(d = map(z, ~data.frame(.x) %>% gather(name, z))) %>%
  unnest(d)

# # A tibble: 5 x 3
#   y     name      z
#   <chr> <chr> <dbl>
# 1 D     a         1
# 2 D     b         2
# 3 D     c         3
# 4 E     a         4
# 5 E     c         5
0 голосов
/ 02 октября 2018
suppressMessages(library(tidyverse))

df <- data_frame(y = c("D", "E"), x = list(list(a = 1, b = 2, c = 3), list(a = 4, c = 5)))

df %>%
  mutate(d = map(x, ~data.frame(.x) %>% gather(name, x))) %>%
  unnest(d)

# # A tibble: 5 x 3
#   y     name      x
#   <chr> <chr> <dbl>
# 1 D     a         1
# 2 D     b         2
# 3 D     c         3
# 4 E     a         4
# 5 E     c         5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...