首页 > 解决方案 > 如何扩展包含带有列表的列的 data.frame

问题描述

我有一个 data.frame,其中一列包含一个值列表:

d <- data.frame(id=1:2, parent=c("Jon", "Mark"))
d$children <-  list(c("Mary", "James"), c("Greta", "Sally"))

如何将此 data.frame 转换为以下结构:

target_df <- data.frame(id=1:4, parent=c("Jon", "Jon","Mark", "Mark"), children = c("Mary", "James","Greta", "Sally"))

标签: rdataframe

解决方案


您应该使用unnestfromtidyr或者您可以映射tidyverse,抱歉之前,我已经映射tidyverse了 .Rprofile 文件。无论如何

library(tidyverse) #or map library(tidyr) whatever suits you
d %>% 
  unnest(children) %>%
  mutate(id = 1:row_number()) #You may not want to run this if you want to keep your original id

同样以基本 R方式:

d_new <- do.call('rbind', do.call('Map', c(data.frame, d)))

同样,要重置 id,我们必须使用1:nrow(d)

d_new$id <- 1:nrow(d) #This may not be required if you don't want to reset your id

感谢所有的评论,他们都受到欢迎,是的,我不知所措。感谢@Ronak Shah,@r2evans


推荐阅读