You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用map从数据框列表中提取数据框名称?

解决方法

要在遍历数据框列表时获取当前数据框的名称,直接用map无法拿到对应名称,推荐用purrr::imap函数——它是map的变体,会同时传递列表元素和对应的名称作为参数,刚好能替代代码里的YYY位置。

修改后的完整代码如下:

library(dplyr)
library(purrr)

df1 <- data.frame(var1=seq(1:10), var2=seq(1:10), ID=1)
df2 <- data.frame(var2=seq(1:10), ID=2)
df3 <- data.frame(var3=seq(1:10), ID=3)
df_lst <- tibble::lst(df1, df2, df3)
codebook= data.frame(var.name = c("var1", "var2", "var3", "ID"),
                     df.name=c("df1", "df2", "df3", "ALL"))

# 用imap替代map,.y就是当前数据框的名称
result <- imap(df_lst, ~ {
  data_sub <- codebook %>% 
    filter(var.name %in% names(.x) & df.name %in% c(.y, "ALL"))
  .x %>% select(data_sub$var.name) 
})
  • 逻辑说明:imap里的.x对应列表中的单个数据框,.y就是该数据框的名称(比如遍历到df1时,.y就是字符串"df1")
  • 这样就能精准匹配codebook里的df.name字段,筛选出当前数据框对应的变量,再通过select提取目标变量

如果习惯用map2,也可以手动传入列表和名称列表,效果完全一致:

result <- map2(df_lst, names(df_lst), ~ {
  data_sub <- codebook %>% 
    filter(var.name %in% names(.x) & df.name %in% c(.y, "ALL"))
  .x %>% select(data_sub$var.name) 
})

内容的提问来源于stack exchange,提问作者Stataq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 17:32:38