首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在for循环中使用write_xlsx将数据帧导出到多个工作表中

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

Stack Overflow用户
提问于 2021-05-12 10:35:36
回答 2查看 102关注 0票数 0

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

我不能使用xlsx包,因为它不能在我的R上运行。我已经尝试使用writexl::write_xlsx函数,但是我不能使它工作。这里有一个简单的例子来重现我的问题:

代码语言:javascript
复制
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)
}

它会产生以下错误:

代码语言:javascript
复制
Error in write_xlsx(dframe, sheet = !!paste(carriers[i]), excel = "flights_data.xlsx",  : 
  unused arguments (sheet = !!paste(carriers[i]), excel = "flights_data.xlsx")

如何修复此错误?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-12 11:31:16

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

代码语言:javascript
复制
library(nycflights13)
library(writexl)
library(tidyverse)
carriers <- c( "UA", "AA", "B6", "DL")

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

代码语言:javascript
复制
output <- map(set_names(carriers),function(cr){
  dframe_flt <- flights %>% 
    filter(carrier == cr) %>% 
    summarize(distance_m = mean(distance))
})

写入xlsx:

代码语言:javascript
复制
write_xlsx(output, path = "flights_data.xlsx", col_names = TRUE)
票数 1
EN

Stack Overflow用户

发布于 2021-05-12 11:39:09

subsetaggregatesplit和write:

代码语言:javascript
复制
carriers <- c( "UA", "AA", "B6", "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')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67496613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档