在R(dplyr)中按名称条件筛选数据框列表
解决方法
要实现按数据框名称(奇数编号)自动筛选,核心是把数据框和它的名称绑定存储——单纯的列表只保存数据框对象,不会记录原变量名。下面分两种场景给出方案:
场景1:还未创建数据框列表(推荐方式)
直接用字典存储数据框,键为数据框名称,值为对应的数据框对象,之后通过筛选键来提取目标数据框:
# 1. 将数据框存入字典(键是名称,值是数据框) df_dict = { "DF_1": DF_1, "DF_2": DF_2, "DF_3": DF_3, "DF_4": DF_4, "DF_5": DF_5 } # 2. 筛选名称含奇数编号的数据框 # 拆分名称提取编号,判断是否为奇数 filtered_dfs = [df for name, df in df_dict.items() if int(name.split("_")[1]) % 2 == 1]
场景2:已经存在df_list列表
如果已经有了df_list,可以通过当前命名空间(全局/局部)匹配数据框对象对应的变量名,再筛选:
# 从全局命名空间中匹配df_list里的数据框及其名称 # 仅匹配以"DF_"开头的变量,避免误匹配 df_name_map = {name: obj for name, obj in globals().items() if obj in df_list and name.startswith("DF_")} # 筛选奇数编号的数据框 filtered_dfs = [df for name, df in df_name_map.items() if int(name.split("_")[1]) % 2 == 1]
注意事项
- 如果是在函数内部操作,把
globals()换成locals(),获取当前函数的局部命名空间。 - 用
globals()/locals()时,要确保没有其他同名的DataFrame对象,否则会出现匹配错误。
内容的提问来源于stack exchange,提问作者John Park
相关产品推荐
相关产品推荐

