如何通过匹配模式将多个R语言列表合并为一个?
按模式合并R语言全局环境中列表的解决方案
修正获取列表名称的错误
你当前使用list.files(pattern = "*_bigmarkets")是错误的——这个函数用于读取系统目录中的文件,而非R全局环境里的对象。要获取全局环境中名称符合*_bigmarkets模式的对象,需用ls()配合正则匹配:
# 匹配全局环境中名称以_bigmarkets结尾的对象 names_of_lists <- ls(pattern = "_bigmarkets$")
合并列表的实用方法
方法1:数据框列表合并(推荐用dplyr)
如果待合并的列表元素都是数据框,用mget()取出对象后,结合dplyr::bind_rows()合并:
library(dplyr) # 按名称取出所有列表,再按行合并为单个数据框 merged_df <- mget(names_of_lists) %>% bind_rows()
方法2:基础R实现数据框合并
不想加载第三方包的话,用基础R的do.call():
# 取出所有列表后按行合并 merged_df <- do.call(rbind, mget(names_of_lists))
方法3:普通列表合并为大列表
如果待合并对象是普通列表(非数据框),要合并成一个大列表:
# 合并为不递归的大列表 merged_list <- unlist(mget(names_of_lists), recursive = FALSE)
优化文件导入步骤(可选)
你之前用循环load()导入文件容易导致全局环境混乱,建议直接将文件内容加载到列表中,省去后续找对象的步骤:
files <- list.files(pattern = "summary_.*RData") # 一次性加载所有文件,提取其中符合模式的对象到列表 loaded_data <- lapply(files, function(file_path) { load(file_path) get(ls(pattern = "_bigmarkets$")) }) # 直接合并这个列表 merged_result <- do.call(rbind, loaded_data)
内容的提问来源于stack exchange,提问作者user12938856
相关产品推荐
相关产品推荐

