r - 如何扩展包含带有列表的列的 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"))
解决方案
您应该使用unnest
fromtidyr
或者您可以映射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
推荐阅读
- asp.net - 如何在 ABP 中使用自定义标题和不同的布局、警卫和自定义登录?
- javascript - 如何从javascript中的原始数据下载wav文件?
- django - 是否可以使用 dj-rest-auth 缩短电子邮件确认密钥?
- php - 使用我的 MapProxyWMS 初始化时出现 Mapbender 错误
- api - IQueryable 未在实体框架核心中生成所需的查询
- javascript - React Native 中的全局变量
- embedded - ADC 中断不适用于产生 PWM 的 TIMER3 中断
- c# - 创建一对多关系 EF Core - 更新数据库失败
- flutter - 当我在颤动中按四次时检测电源关闭按钮
- python - Filtering files using specific pattern when reading tar.gz archive in Pyspark