在R语言中按名称筛选全局环境中的数据框并合并为单个数据框的方法咨询
在R语言中按名称筛选全局环境中的数据框并合并为单个数据框的方法咨询
我已经创建了多个数据框,现在需要根据名称筛选出其中一部分(比如名称包含"ssp126"或者"2011-2040"的那些),然后将它们合并成一个单独的数据框。
我当前全局环境中的数据框名称列表如下:
names(which(unlist(eapply(.GlobalEnv,is.data.frame))))
[1] "map_2071-2100_ssp370" "map_2041-2070_ssp585" "map_2011-2040_ssp585" "map_2041-2070_ssp370" [9] "map_2011-2040_ssp126" "map_2041-2070_ssp126" "map_2071-2100_ssp126" [13] "map_2011-2040_ssp370" "map_1951-1980" "map_2071-2100_ssp585" [17] "map_1981-2010"
请问有人能给我一些建议吗?谢谢!
解决方案分享
我来给你几个实用的解决思路,亲测靠谱:
方法一:借助dplyr包快速合并(推荐)
如果你平时常用tidyverse系列工具,这个方法会很顺手:
# 先安装并加载dplyr,没装过的话先跑install.packages("dplyr") library(dplyr) # 第一步:筛选出符合名称条件的数据框名称 target_names <- grep("ssp126|2011-2040", names(which(unlist(eapply(.GlobalEnv, is.data.frame)))), value = TRUE) # 第二步:获取这些数据框并合并成一个大框 combined_df <- bind_rows(mget(target_names, envir = .GlobalEnv))
bind_rows的好处是能自动处理列不匹配的情况,缺失的列会自动填充NA,很省心。
方法二:基础R原生实现(无需额外包)
要是不想加载第三方包,用基础R的组合也能搞定:
# 同样先筛选目标数据框名称 target_names <- grep("ssp126|2011-2040", names(which(unlist(eapply(.GlobalEnv, is.data.frame)))), value = TRUE) # 获取数据框列表,再用do.call+ rbind合并 df_list <- mget(target_names, envir = .GlobalEnv) combined_df <- do.call(rbind, df_list)
注意哦,这个方法要求所有要合并的数据框列名和数据类型完全一致,不然会报错。
备注:内容来源于stack exchange,提问作者Tristan
相关产品推荐
相关产品推荐

