如何简洁合并列表中20个行数相同的DataFrame(替代重复cbind写法)
批量按列合并DataFrame列表的正确方法
你遇到的问题是因为mylist[1:20]传递给cbind()时,是把整个子列表作为单个参数传入,而cbind()需要的是多个独立的DataFrame参数,所以才会输出奇怪的结果。下面是几种无需重复代码的解决方式:
基础R方案:用do.call()
do.call()能把列表里的每个元素拆成独立参数传给目标函数,完美适配cbind()的需求:
# 合并列表前20个元素 combined_df <- do.call(cbind, mylist[1:20]) # 如果要合并整个列表,直接传mylist即可 combined_df <- do.call(cbind, mylist)
tidyverse方案:用dplyr::bind_cols()
如果常用tidyverse工具,dplyr的bind_cols()专门做按列合并,直接支持列表输入:
library(dplyr) combined_df <- bind_cols(mylist[1:20])
高效大数据方案:用data.table::cbindlist()
处理大数据量时,data.table的cbindlist()速度更快,用法也简单:
library(data.table) combined_df <- cbindlist(mylist[1:20]) # 如需转成普通DataFrame,执行: combined_df <- as.data.frame(combined_df)
注意事项
务必保证列表里所有DataFrame的行数完全相同,否则这些合并方法都会报错——这是按列合并的基本要求。
内容的提问来源于stack exchange,提问作者Kev
相关产品推荐
相关产品推荐

