按列表和数据框名称合并两个嵌套列表中的R数据框
按名称合并嵌套列表中的对应数据框
我们需要将两个结构一致的嵌套列表中,同名同层级的数据框按行合并,最终得到结构相同的嵌套列表。以下是两种可行的解决方案:
方法一:使用purrr包(tidyverse生态)
利用purrr::map2可以递归处理嵌套列表的对应元素,代码简洁直观:
library(purrr) # 两层嵌套的对应数据框行合并 list3 <- map2(list1, list2, ~map2(.x, .y, rbind))
方法二:基础R实现(无需额外包)
通过mapply和lapply的嵌套组合,实现相同逻辑:
list3 <- mapply(function(outer_x, outer_y) { # 遍历内层列表的名称,合并对应数据框 inner_merged <- lapply(names(outer_x), function(df_name) { rbind(outer_x[[df_name]], outer_y[[df_name]]) }) # 为内层合并后的列表恢复原名称 setNames(inner_merged, names(outer_x)) }, list1, list2, SIMPLIFY = FALSE)
验证结果
执行上述代码后,查看合并后的结果:
# 查看list_a下的df1 list3$list_a$df1 # 查看list_a下的df2 list3$list_a$df2 # 查看list_b下的df3 list3$list_b$df3
输出将完全符合预期的合并效果:对应名称的数据框按行拼接,列表层级结构保持不变。
注意:以上方法默认两个输入列表的层级结构和名称完全匹配,如果存在名称不匹配的元素,需要先处理名称交集(比如取
intersect(names(list1), names(list2)))再进行合并。
内容的提问来源于stack exchange,提问作者joaovitorpigozzo
相关产品推荐
相关产品推荐

