我正在尝试构建一个循环,该循环自动对数据集进行子集化,进行大量计算,并将每个组的结果作为单独的工作表打印到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”代替?或者是否有另一种方法可以在不同的方案或不同的方法中实现我的目标?
答案 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
你的所有床单都得到了你的擅长!
这是我的输出: