在R语言中合并含共同列的列表内数据框的简便方法
当然有啦!合并列表里这些共享相同列的数据框其实有好几种直接简便的方法,我给你整理几个常用的,结合你的rms.byhr列表例子来演示:
方法1:Base R原生方案——
do.call() + rbind() 这是最基础的原生方法,不需要额外安装包,直接就能用:
# 直接合并所有数据框 combined_df <- do.call(rbind, rms.byhr)
如果想保留每个数据框对应的band标识(比如区分是band1还是band2的数据),可以先给每个子数据框加个标识列再合并:
# 给每个数据框添加来源band的列 rms_with_band <- Map(function(df, band_name) { df$band <- band_name df }, rms.byhr, names(rms.byhr)) # 合并 combined_df <- do.call(rbind, rms_with_band)
方法2:dplyr包的
bind_rows()(推荐,简洁直观) dplyr的这个函数专门用来合并行,还能自动帮你添加来源标识,用起来超省心:
library(dplyr) # .id参数用来指定标识列的名字,这里就叫"band" combined_df <- bind_rows(rms.byhr, .id = "band")
方法3:data.table包的
rbindlist()(大数据量首选) 如果你的列表里数据框特别大,用data.table的这个方法速度会快很多,同样支持添加来源标识:
library(data.table) # idcol参数指定标识列名 combined_df <- rbindlist(rms.byhr, idcol = "band")
至于你之前用sapply没处理好的问题,大概率是sapply默认返回的是矩阵格式,而不是数据框,而且它不太适合直接用来合并数据框,上面这几个方法都是专门针对这类场景设计的,比sapply更直接可靠。
内容的提问来源于stack exchange,提问作者Anke
相关产品推荐
相关产品推荐

