You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在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 = ", "))
  )

执行完这段代码后,你会得到一行对应一个年份的表格,包含maxh2maxh3、两组hours的字符串,结构非常规整。

第三步:导出到Excel

writexlwrite_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

火山引擎 最新活动