首页 > 解决方案 > 如何在 R 中以这种方式展平数据框?

问题描述

假设我有这个数据框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

换句话说, column 中的每个列表项都应该有一个新行b

我看了这三件事:

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

还有 两个问题,似乎没有什么是对的。

是的,我从返回 json 的 API 获取这些数据。

标签: r

解决方案


我们可以unnest使用keep_emptyasTRUE

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    

推荐阅读