如何为列表中的DataFrame命名并提取各DataFrame变量列表
解决方法
1. 正确给列表中的DataFrame命名
你之前的代码错误地修改了每个DataFrame的列名,而不是给列表的元素命名。只需直接对整个列表设置元素名即可:
library(stringr) # 给列表元素命名为df1、df2、df3 lst <- setNames(lst, str_c("df", seq_along(lst)))
如果需要把这些DataFrame直接放到全局环境(可以直接调用df1、df2、df3),执行:
list2env(lst, .GlobalEnv)
2. 生成变量汇总表
用purrr的imap_dfr遍历命名后的列表,同时获取DataFrame名称和对应的变量名,生成汇总表:
library(purrr) library(tibble) summary_table <- imap_dfr(lst, ~ tibble( dataframe_name = .y, variable_name = colnames(.x) )) print(summary_table)
运行后输出结果:
# A tibble: 9 × 2 dataframe_name variable_name <chr> <chr> 1 df1 ID 2 df1 Score 3 df1 Test 4 df2 ID 5 df2 Score 6 df2 try 7 df3 ID 8 df3 Score 9 df3 weight
完整代码整合
library(tidyverse) # 样本数据 lst <- list( structure(list(ID = c("Tom", "Jerry", "Mary"), Score = c(85, 85, 96), Test = c("Y", "N", "Y")), row.names = c(NA, -3L), class = c("tbl_df", "tbl", "data.frame")), structure(list(ID = c("Tom", "Jerry", "Mary", "Jerry"), Score = c(75, 65, 88, 98), try = c("Y", NA, "N", NA)), row.names = c(NA, -4L), class = c("tbl_df", "tbl", "data.frame")), structure(list(ID = c("Tom", "Jerry", "Tom"), Score = c(97, 65, 96), weight = c("A", NA, "C")), row.names = c(NA, -3L), class = c("tbl_df", "tbl", "data.frame")) ) # 给列表元素命名 lst <- setNames(lst, str_c("df", seq_along(lst))) # 可选:将DataFrame导出到全局环境 list2env(lst, .GlobalEnv) # 生成变量汇总表 summary_table <- imap_dfr(lst, ~ tibble( dataframe_name = .y, variable_name = colnames(.x) )) print(summary_table)
内容的提问来源于stack exchange,提问作者Stataq
相关产品推荐
相关产品推荐

