如何在R语言中导出不同长度的嵌套列表至Excel表格
解决嵌套列表导出Excel的问题
我之前也折腾过类似的嵌套列表导出问题,给你一套实用的解决方案——先用R的tidyverse把数据拆成规整的结构,再导出到Excel,步骤超清晰:
第一步:加载必要的包
我们需要用tidyverse处理嵌套数据,writexl导出Excel(这个包不需要Java依赖,用起来特别省心):
library(tidyverse) library(writexl)
第二步:扁平化你的嵌套列表
你的数据是按年份(X2005-X2008)分层,每个年份下有hours(两个数值列表)和maxx(两个标量)。我们把它转换成一眼就能看懂的整洁数据框:
# 先把原始列表转成带年份列的tibble df <- tibble(year = names(a), data = a) %>% # 展开data列,拆分出hours和maxx unnest_wider(data) %>% # 把maxx里的两个标量拆成单独列 unnest_wider(maxx) %>% # 拆分hours的两个子列表为单独列 unnest_wider(hours, names_sep = "_") %>% # 把每个hours子列表的数值转成逗号分隔的字符串(方便Excel里查看) mutate( hours_1 = map_chr(hours_1, ~paste(.x, collapse = ", ")), hours_2 = map_chr(hours_2, ~paste(.x, collapse = ", ")) )
执行完这段代码后,你会得到一行对应一个年份的表格,包含maxh2、maxh3、两组hours的字符串,结构非常规整。
第三步:导出到Excel
用writexl的write_xlsx函数直接导出即可:
write_xlsx(df, "嵌套列表导出结果.xlsx")
进阶:按年份拆分工作表
如果你想把每个年份的数据单独放在一个Excel工作表里,可以用openxlsx包实现:
library(openxlsx) wb <- createWorkbook() # 遍历每个年份,创建对应工作表并写入数据 walk(names(a), function(year) { # 整理当前年份的数据 sheet_data <- tibble(year = year) %>% bind_cols(as_tibble(a[[year]]$maxx)) %>% mutate( hours_1 = paste(a[[year]]$hours[[1]], collapse = ", "), hours_2 = paste(a[[year]]$hours[[2]], collapse = ", ") ) # 添加工作表并写入数据 addWorksheet(wb, sheetName = year) writeData(wb, sheet = year, x = sheet_data) }) # 保存工作簿 saveWorkbook(wb, "分工作表导出结果.xlsx", overwrite = TRUE)
可选:长格式数据导出
如果后续需要对数值做分析,也可以把每个数值拆成单独行:
df_long <- tibble(year = names(a), data = a) %>% unnest_wider(data) %>% unnest_wider(maxx) %>% unnest_longer(hours) %>% unnest_longer(hours)
这种长格式更适合统计分析,导出Excel的方式和之前一样。
内容的提问来源于stack exchange,提问作者Hüsamettin Tayşi




