R语言:使用imap从列表提取数据框时如何保留原列名?
问题原因
你代码里的set_names(tibble(.x), .y)是问题核心:.y是lst2中每个子数据框的分组名称(也就是1、2、3...这类数字),这行代码强制把所有列名替换成了这个分组编号,所以才会丢失原始列名。
修正后的代码
只需要移除错误的set_names()调用,因为tibble(.x)本身会保留原数据框的列名:
# Create a large dummy dataset df2 = data.frame(Year = 2022, Reference_Number = seq(1,6694), c = seq(1,6694), d = seq(1,6694), e = seq(1,6694), f = seq(1,6694), g = seq(1,6694), h = seq(1,6694), i = seq(1,6694), k = seq(1,6694), l = seq(1,6694), m = seq(1,6694), n = seq(1,6694), o = seq(1,6694), p = seq(1,6694), q = seq(1,6694), replace = T) # Create a list with splitted datasets n = 1000 lst2 = split(df2, as.integer(gl(nrow(df2), n, nrow(df2)))) # Extract dataframes (修正后的代码) imap(lst2, ~ tibble(.x)) %>% set_names(str_c("DFF", seq_along(.))) %>% list2env(.GlobalEnv)
验证说明
运行修正后的代码后,生成的DFF1到DFF7这些数据框会完全保留原df2的列名(Year、Reference_Number、c、d等),同时保持数据拆分的逻辑不变。
内容的提问来源于stack exchange,提问作者Ed_Gravy
相关产品推荐
相关产品推荐

