这是我的 excel 输出在一张纸中的样子,
Total Expenses
Region Jan-18 Feb-18 Mar-18
Reg1 32 65 56
Reg2 24 45 89
Reg3 15 78 23
Average Expenses
Region Jan-18 Feb-18 Mar-18
Reg1 12 14 13
Reg2 13 15 14
Reg3 11 14 12
Run Code Online (Sandbox Code Playgroud)
我使用 rbind 在 R 中构建它,首先添加带有相应数据集的标题,然后添加空行,然后添加数据集。然而,通过这样做,我失去了实际数据的数字性质。我们可以在为我的数字保留数字数据类型的同时做到这一点吗?
注意:以上是要在一张 Excel 中写入的示例数据,同样我正在构建 4 个不同的表作为数据框列表并使用 write.xlsx 输出它们。
这是一个使用 xlsx 包的工作示例:
totExpenses <- data.frame('Region'=c('Reg1','Reg2','Reg3'),
'Jan-18'=c(32,24,15),
'Feb-18'=c(65,45,78),
'Mar-18'=c(56,89,23),check.names=FALSE)
avgExpenses <- data.frame('Region'=c('Reg1','Reg2','Reg3'),
'Jan-18'=c(12,13,11),
'Feb-18'=c(14,15,14),
'Mar-18'=c(13,14,12),check.names=FALSE)
library(xlsx)
wb <- createWorkbook()
sh <- createSheet(wb,"mySheet")
row <- 1
addDataFrame(data.frame("Total Expenses"=double(),check.names=FALSE),
sheet = sh,startRow=row,row.names=FALSE)
row <- row + 2
addDataFrame(totExpenses,sheet=sh,startRow=row,row.names=FALSE)
row <- row + nrow(totExpenses) + 2
addDataFrame(data.frame("Average Expenses"=double(),check.names=FALSE),
sheet=sh,startRow=row,row.names=FALSE)
row <- row + 2
addDataFrame(avgExpenses,sheet=sh,startRow=row,row.names=FALSE)
saveWorkbook(wb,file='myfile.xlsx')
Run Code Online (Sandbox Code Playgroud)
结果 :
这是一个自定义函数,它采用 data.frame 的命名列表并将它们写入具有所需结构的 Excel 工作表:
writeListOfDFToSheet <- function(lst,workBook,sheetName){
sh <- createSheet(workBook,sheetName)
# force names in list if not present
if(is.null(names(lst)))
names(lst) <- rep.int("",length(lst))
names(lst) <- ifelse(names(lst) == "",paste("data.frame",1:length(lst)),names(lst))
row <- 1
for(i in seq_len(length(lst))){
DFName <- names(lst)[i]
DF <- as.data.frame(lst[[i]])
# header
addDataFrame(setNames(data.frame(x=logical()),DFName),
sheet=sh,startRow=row,row.names=FALSE)
row <- row + 2
# data.frame
addDataFrame(DF,
sheet=sh,startRow=row,row.names=FALSE)
row <- row + nrow(DF) + 2
}
invisible(NULL)
}
Run Code Online (Sandbox Code Playgroud)
使用示例(假设定义了前 2 个 data.frame):
# create a workbook
wb <- createWorkbook()
# write to "sheet 1"
lst1 <- list("Total Expenses"=totExpenses,"Average Expenses"=avgExpenses)
writeListOfDFToSheet(lst1,wb,"sheet 1")
# write to "sheet 2"
# (I'm using the same data.frame's but it's just an example)
lst2 <- list("Total Expenses"=totExpenses,"Average Expenses"=avgExpenses)
writeListOfDFToSheet(lst2,wb,"sheet 2")
# save excel file
saveWorkbook(wb,file='myfile.xlsx')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1466 次 |
| 最近记录: |