将不同的数据框导出到同一Excel工作表

问题描述

我正在使用 openxlsx 包将数据帧从R导出到excel。

如何导出多个数据框:

a <- data.frame("y"=c(2009,2010,2011,2012),"b"=c(3,4,5,6))
b <- data.frame("y"=c(2009,"b"=c(12,2,7,8))
c <- data.frame("y"=c(2009,"b"=c(5,9,1,6))

在同一张Excel工作表上,每一个与上一个用空行隔开,并为每一个添加一个列名?

解决方法

我们可以使用 writeData startRow 参数一起玩,这里是一个示例:

# create workbook
wb <- createWorkbook()
addWorksheet(wb,"Sheet1")

# add dataframes a,b,c starting on different rows
writeData(wb = wb,sheet = "Sheet1",startCol = 1,startRow = 1,x = a)
writeData(wb = wb,startRow = 1 + nrow(a) + 2,x = b)
writeData(wb = wb,startRow = 1 + nrow(a) + 2 + nrow(b) + 2,x = c)

# outout to a file
saveWorkbook(wb,"myFile.xlsx",overwrite = TRUE)

enter image description here

,

也许您可以尝试以下类似的方法

df <- do.call(rbind,lapply(list(a,c),function(x) rbind(x,"")))
write.xlsx(df,"xxx.xlsx")

df的外观

> df
      y  b
1  2009  3
2  2010  4
3  2011  5
4  2012  6
5
6  2009 12
7  2010  2
8  2011  7
9  2012  8
10
11 2009  5
12 2010  9
13 2011  1
14 2012  6
15

如果您想垂直堆叠这些数据帧,这是另一种版本(类似于@zx8754的版本)

wb <- createWorkbook()
addWorksheet(wb,"Sheet1")
lst <- list(a,c)
startRows <- cumsum(c(1,(sapply(lst,nrow)+2)[-length(lst)]))
for (k in seq_along(lst)) {
  writeData(wb = wb,startRow = startRows[k],x = lst[[k]])
}
saveWorkbook(wb,"xxxx.xlsx",overwrite = TRUE)