【问题标题】:R loop - Subset the file and run xlsx codeR循环-子集文件并运行xlsx代码
【发布时间】:2018-07-11 20:34:06
【问题描述】:

我有一个由 3 个变量组成的数据框,其中一个称为人员的变量包含 13 个不同的员工组,变量 y 称为国家,其中包含员工所在的 10 个国家。每个国家都应放入自己的 Excel 工作簿与相应的工作人员组。所以我应该有 13 x 10 排列,我想要每个国家/地区的 excel 工作簿,并且我正在使用 XLSX 包来执行此操作,但我想创建一个循环,按国家/地区过滤数据并将每个国家/地区保存到它自己的 excel 文件中,所以我不必复制代码 10 次。我的数据框名称是“成本”

以下是我目前的代码,没有错误,但也没有输出。

countries <- c("Ireland", "Scotland", "England", "Wales", "Germany", "Italy", "Russia", "Denmark", "USA", "Spain")

for(countriesb in countries){

#create excel output for each country
wb = createWorkbook(type="xlsx")

Costsheet = createSheet(wb, "Country")

Cost%>% filter(country==countriesb)

xlsx.addTitle<-function(sheet, rowIndex, title, titleStyle){
rows <-createRow(sheet,rowIndex=rowIndex)
sheetTitle <-createCell(rows, colIndex=1)
setCellValue(sheetTitle[[1,1]], title)
setCellStyle(sheetTitle[[1,1]], titleStyle)

TITLE_STYLE <- CellStyle(wb)+ Font(wb,  heightInPoints=16, 
                                   color="blue", isBold=TRUE, underline=0)

xlsx.addTitle(Cost, rowIndex=1, title="Cost",titleStyle = TITLE_STYLE)
addDataFrame(Cost, Costsheet, startRow =3, row.names=FALSE)

saveWorkbook(wb, "country.xlsx")

}
}

【问题讨论】:

  • 每次迭代都会覆盖您的工作簿。
  • 回头看,那是很明显的!谢谢。我根本没有得到任何输出,我希望最后一个国家会有一个输出?
  • 您需要实际编写 xlsx。看看documentation
  • 这就是 saveWorkbook 的作用?当我仅针对 1 个国家/地区对其进行测试时,这很有效,它给了我一个输出

标签: r loops for-loop filter xlsx


【解决方案1】:

考虑以下最小示例:

require("xlsx")

wb = createWorkbook(type="xlsx") #Create a workbook outside of the loop

x <- c("USA","UK","NL")

for(i in x){
    sh = createSheet(wb, as.character(i)) #Create Sheets inside the loop with corresponding x-values as sheet names
    addDataFrame(mtcars,sh, startRow =3, row.names=FALSE) # Add your data to the sheets
}

saveWorkbook(wb, "C:/YourPath/Yourfile.xlsx") # save your workbook outside the loop

【讨论】:

  • 谢谢,逻辑是有道理的。我会尝试将其应用于我的问题,我想要每个国家/地区的单独工作簿,而不是标签。
  • 有没有办法为每个国家/地区保存一个动态文件名(例如 saveWorkbook(wb, x.xlsx") ?
  • 使用paste函数。
  • 干杯!我在谷歌搜索后发现了这一点。我使用了 file_name
猜你喜欢
  • 1970-01-01
  • 2014-02-20
  • 2021-01-31
  • 2020-05-19
  • 1970-01-01
  • 2016-01-08
  • 2018-02-28
  • 2017-09-16
  • 2016-11-21
相关资源
最近更新 更多