如何在for循环中自动重命名工作表名称(xlsx)

时间:2014-11-18 18:07:21

标签: r xlsx

我正在尝试构建一个循环,该循环自动对数据集进行子集化,进行大量计算,并将每个组的结果作为单独的工作表打印到xlsx-workbook-file。它应该与以下代码一致:

library(xlsx)
clist <- c("group1", "group2", "group3")
for (i in clist) {
datasubset <- filter(data, group == i)

mean <- mean(datasubset)

results <- createWorkbook()
sheet.i <- createSheet(results, sheetName = paste("results", i, sep=" "))
addDataFrame(mean, sheet.i, startRow=1, startColumn=1, row.names = FALSE)
}

最后两行显然不起作用。问题是如何根据i的值命名sheet.i。例如:sheet.group1,sheet.group2等。那么用什么代码“sheet.i”代替?或者是否有另一种方法可以在不同的方案或不同的方法中实现我的目标?

1 个答案:

答案 0 :(得分:1)

很多事情需要在上面的代码中修复才能实现,但我希望这有助于解决这些问题:

library(xlsx)
x <- runif(900)
group <- rep(c('group1','group2','group3'),300)
df <- data.frame(x,group)

wb <- createWorkbook() #make workbook outside the loop. You only need 1 workbook
for ( i in c('group1','group2','group3')) {
  datasubset <- subset(df, group == i)

  mean <- data.frame(mean(datasubset[['x']])) #needs to be a dataframe to use addDataFrame

  sheet <- createSheet(wb , sheetName = sprintf('sheet.%s',i)) #make each sheet

  addDataFrame(mean, sheet, startRow=1, startColumn=1, row.names = FALSE) #add dataframe 'mean' to each sheet
}
saveWorkbook(wb, 'test.xlsx') #don't forget to save

你的所有床单都得到了你的擅长!

这是我的输出:

enter image description here