Как сглаживать таким образом фрейм данных в R? - PullRequest
1 голос
/ 31 марта 2020

Предположим, у меня есть этот фрейм данных df:

> df <- data.frame(a=c(1,2))
> df$b <- list(list(),list(id=c('d', 'e')))
> df
  a    b
1 1 NULL
2 2 d, e
> df$b
[[1]]
list()

[[2]]
[[2]]$id
[1] "d" "e"

Как получить следующий фрейм данных:

> df2 <- data.frame(a=c(1,2,2),b=c(NA,'d','e'))
> df2
  a    b
1 1 <NA>
2 2    d
3 2    e

Другими словами, должна быть новая строка для каждого элемента списка в столбце b.

я рассмотрел эти три вещи:

jsonlite::flatten(df)
rlang::flatten(df)
purrr::flatten(df)

, а также эти два вопроса, и ничто не казалось совершенно правильным.

Да, я получаю эти данные от API, который возвращает json.

1 Ответ

1 голос
/ 31 марта 2020

Мы можем использовать unnest с keep_empty как TRUE

library(dplyr)
library(tidyr)
df %>%
    unnest(c(b), keep_empty = TRUE) %>% 
    unnest(c(b), keep_empty = TRUE)
# A tibble: 3 x 2
#      a b    
#  <dbl> <chr>
#1     1 <NA> 
#2     2 d    
#3     2 e    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...