我目前正在尝试在同一个Excel工作表中输出多个R数据框。 我有一个生成270个表的脚本。基本上,我想以这种方式对表格进行分组:
我想过按照以下方式对它们进行分组:
但这意味着我必须在工作时在每个文件之间跳转,这实际上并不实际。我还考虑过使用cbinds
和rbinds
在一个数据框中对15个表集进行分组,并使用空行/列来标记它们之间的分隔。但是,我对这个解决方案并不满意,因为它不是很优雅。
我不知道是否有任何软件包可以执行此操作,或者xslx / Rexcel软件包是否可以,但我还没有找到它。当我试图找到这个问题的答案时,我只找到关于在不同的Excel表格中写作的主题。
如果有人有解决方案,我很高兴知道它:)。
答案 0 :(得分:1)
我最近离开了 XLConnect ,但过去我使用了类似下面的功能来做这类事情。
require(XLConnect)
write_excel_gap <- function(path = NULL,
data_list = NULL,
gap = 1,
sheet = "Sheet1",
header = TRUE,
firstRow = 1,
add = FALSE,
addSheet = TRUE,
style = TRUE,...){
stopifnot(length(gap) > 0,!is.null(path),!is.null(data_list))
if (add){
wb <- loadWorkbook(path,create = FALSE)
}else{
wb <- loadWorkbook(path,create = TRUE)
}
if (addSheet){
createSheet(wb,sheet)
}
if (!style){
setStyleAction(wb,XLC$"STYLE_ACTION.NONE")
}
n <- length(data_list)
ng <- length(gap)
dl_rows <- sapply(data_list,nrow)
if (ng == 1){
sr <- c(firstRow,firstRow + head(cumsum(dl_rows),-1)) +
c(0,cumsum(rep(gap,n-1)))
}else{
if(ng != n-1){
warning("Length of gap is not one less than length of data_list.
\nGap will be recycled as needed.")
}
sr <- c(firstRow,firstRow + head(cumsum(dl_rows),-1)) +
c(0,cumsum(gap))
}
if (header){
writeWorksheet(object=wb,
data=data_list[[1]],
sheet=sheet,
startRow=firstRow,
header = TRUE,...)
sr <- sr[-1] + 1
writeWorksheet(object = wb,
data = data_list[-1],
sheet = sheet,
startRow = sr,
header = FALSE,...)
}else{
writeWorksheet(object = wb,
data = data_list,
sheet = sheet,
startRow = sr,
header = FALSE,...)
}
saveWorkbook(wb)
}