微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 for 循环中使用 write_xlsx 将数据帧导出到多个工作表中

如何解决在 for 循环中使用 write_xlsx 将数据帧导出到多个工作表中

我想导出一些我通过 for 循环创建的数据帧。这些应导出到同一文件中的不同 Excel 工作表。导出时,我希望每个工作表都有不同的名称。例如,以下示例中的工作表名称应该来自字符向量 carriers

我无法使用 xlsx 包,因为它不能在我的 R 上运行。我曾尝试使用 writexl::write_xlsx 函数,但无法使其工作。这是重现我的问题的简单示例:

library(nycflights13)
library(writexl)

carriers <- c( "UA","AA","B6","DL")

for(i in 1:length(carriers)){
dframe_flt <- flights %>% filter(carrier == carriers[i]) %>% summarize(distance_m = mean(distance))
write_xlsx(dframe,sheet = !! paste(carriers[i]),excel = "flights_data.xlsx",col_names = TRUE)
}

它产生以下错误

Error in write_xlsx(dframe,sheet = !!paste(carriers[i]),: 
  unused arguments (sheet = !!paste(carriers[i]),excel = "flights_data.xlsx")

我该如何解决这个错误

解决方法

您收到错误,因为 sheetexcel 不是 write_xlsx 中的参数。要将多个工作表写入单个 xlsx,您需要先将它们全部放入命名列表中,然后将该列表提供给 write_xlsx

library(nycflights13)
library(writexl)
library(tidyverse)
carriers <- c( "UA","AA","B6","DL")

使用地图(来自 tidyr)创建列表:

output <- map(set_names(carriers),function(cr){
  dframe_flt <- flights %>% 
    filter(carrier == cr) %>% 
    summarize(distance_m = mean(distance))
})

写入 xlsx:

write_xlsx(output,path = "flights_data.xlsx",col_names = TRUE)

,

subsetaggregatesplit 和写:

carriers <- c( "UA","DL")
data <- subset(flights,carrier %in% carriers)
data <- aggregate(distance~carrier,data,mean,na.rm = TRUE)
writexl::write_xlsx(split(data,data$carrier),'data.xlsx')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。