R 中的取消嵌套列表列

Unnesting list columns in R

有没有办法在 R 中取消嵌套列表列以删除层次结构并保留向量中的各个组件?我尝试了 tidyr 的 unnest 函数,但出现错误

library(dplyr)
library(tidyr)

mydf <- tibble(
  a1 = c(20, 21, 23, 45),
  a2 = list(c("Male", "Female"), c("Yes", "No"),
            c("Secondary", "Primary", "Tertiary"),
            c("13-14", "15-16", "17 - 18"))
)


#---- Desired output

mydf1 <- tibble(
  a1 = c(20, 21, 23, 45),
  a2 = c("Male, Female", "Yes, No",
          "Secondary, Primary, Tertiary",
            "13-14, 15-16, 17 - 18"))

#--- Trial

mydf %>%
  mutate(a3 = unnest(a2))

我更喜欢 sapplytoString:

mydf$a3 <- sapply(mydf$a2, toString)

现在:

> mydf
# A tibble: 4 x 3
     a1 a2        a3                          
  <dbl> <list>    <chr>                       
1    20 <chr [2]> Male, Female                
2    21 <chr [2]> Yes, No                     
3    23 <chr [3]> Secondary, Primary, Tertiary
4    45 <chr [3]> 13-14, 15-16, 17 - 18       
> 

toString将元素连接成一个字符串,并用, (逗号space)分隔它们。

这会起作用:

mydf %>%
  unnest_wider(a2) %>% # not inside mutate and also '_wider' to get separate columns
  unite(col = "a2", -a1, sep = ", ", na.rm = TRUE) #and now unite those separate cols

使用map

library(dplyr)
library(purrr)
mydf %>% 
   mutate(a2 = map_chr(a2, toString))
# A tibble: 4 × 2
     a1 a2                          
  <dbl> <chr>                       
1    20 Male, Female                
2    21 Yes, No                     
3    23 Secondary, Primary, Tertiary
4    45 13-14, 15-16, 17 - 18