如何在purrr::map_*中连接DataFrame至嵌套列表列内的DataFrame
解决嵌套DataFrame与外部DataFrame的连接问题
看起来你已经搭好基础框架了,我来帮你补全连接逻辑,并且优化实现方式:
首先先把完整的可运行代码给到你,核心思路是遍历嵌套列表里的每个小DataFrame,和外部的mtcars_mpg完成连接,同时保留原有的嵌套结构(也可以按需展开)。
完整实现代码
# 加载依赖包 data(mtcars) library(tidyr) library(purrr) library(dplyr) # 构建按cyl分组的嵌套DataFrame mtcars_nest <- mtcars %>% rownames_to_column() %>% rename(rowname_1 = rowname) %>% select(-mpg) %>% group_by(cyl) %>% nest() # 构建单独存储mpg的DataFrame mtcars_mpg <- mtcars %>% rownames_to_column() %>% rename(rowname_2 = rowname) %>% select(rowname_2, mpg) # 定义连接函数:处理每个嵌套的小DataFrame join_df <- function(df_nest, df_other) { df_nest %>% mutate(data = map(data, ~ inner_join(.x, df_other, by = c("rowname_1" = "rowname_2")))) } # 执行连接操作 mtcars_nested_joined <- join_df(mtcars_nest, mtcars_mpg) # 可选:展开嵌套结构查看完整结果 mtcars_nested_joined %>% unnest(data)
关键逻辑解释
- 我们用
dplyr::mutate配合purrr::map遍历mtcars_nest的data列,对每个嵌套的小DataFrame执行inner_join,匹配规则是两个DataFrame里的行名字段(rowname_1和rowname_2)。 - 执行后原有的嵌套结构会被保留,每个
data列里的小DF都会新增mpg列。 - 如果需要查看所有行的完整展开结果,调用
unnest(data)即可。
更简洁的链式写法(无需单独定义函数)
如果你不想单独写函数,也可以直接用链式调用完成整个操作:
mtcars_nest %>% mutate(data = map(data, inner_join, mtcars_mpg, by = c("rowname_1" = "rowname_2")))
这样就完美实现了你想要的效果:把嵌套在列表列中的每个DataFrame,和外部的mtcars_mpg按行名关联起来~
内容的提问来源于stack exchange,提问作者mark
相关产品推荐
相关产品推荐

