我有一个数据框列表:
dfl <- list(
df1 = data.frame(a=1:3,b=letters[5:7],c=1:3,d=letters[1:3]),
df2 = data.frame(d=1:4,b=1:4,e=1:4,f=letters[1:4]),
df3 = data.frame(g=letters[2:6],b=1:5,h=1:5,i=letters[1:5]),
df4 = data.frame(j=c(1.4,2.4,3.4588),b=letters[1:3],k=1:3,l=letters[1:3],t=7:9),
df5 = data.frame(m=1:4,b=1:4,n=1:4,o=letters[1:4]),
df6 = data.frame(p=1:5,b=1:5,q=1:5,r=letters[1:5],s=4:8)
)
每个数据框具有不同的列数,不同的列名和不同的数据类型。有什么方法可以将数据写入XLS文件(Excel)到一张纸,可能用空行或数据框名称分隔?
目前,我使用的是包WriteXLS
,但此处数据框只能写入单独的工作表:
library(WriteXLS)
WriteXLS("dfl",ExcelFileName="MyExcel.xls")
答案 0 :(得分:2)
我会尝试这样的事情:
dflc <- lapply(dfl, function(x) {
as.data.frame(sapply(x, function(y) {as.character(y)}),stringsAsFactors=FALSE)
})
out <- rbind.fill.matrix(lapply(names(dflc),
function(x) {
rbind(
c(x,rep('',ncol(dflc[[x]])-1)),
names(dflc[[x]]),
setNames(dflc[[x]],NULL),
'')
}
))
out[is.na(out)] <- ''
out <- as.data.frame(out)
out
out
对象如下:
1 2 3 4 5
1 df1
2 a b c d
3 1 e 1 a
4 2 f 2 b
5 3 g 3 c
6
7 df2
8 d b e f
9 1 1 1 a
10 2 2 2 b
11 3 3 3 c
12 4 4 4 d
13
14 df3
15 g b h i
16 b 1 1 a
17 c 2 2 b
18 d 3 3 c
19 e 4 4 d
20 f 5 5 e
21
22 df4
23 j b k l t
24 1.4 a 1 a 7
25 2.4 b 2 b 8
26 3.4588 c 3 c 9
27
28 df5
29 m b n o
30 1 1 1 a
31 2 2 2 b
32 3 3 3 c
33 4 4 4 d
34
35 df6
36 p b q r s
37 1 1 1 a 4
38 2 2 2 b 5
39 3 3 3 c 6
40 4 4 4 d 7
41 5 5 5 e 8
答案 1 :(得分:2)
另一种方法是使用XLConnect
包。我相信你可以修补它来得到你需要的东西,但它大部分都在那里。
library(XLConnect)
wb <- loadWorkbook("sampleFile.xlsx", create = T)
createSheet(wb, name = 'Sheet1')
dflNrow <- 0
for(df in dfl){
dflNrow <- dflNrow + nrow(df)
XLConnect::writeWorksheet(wb, df, sheet = 'Sheet1', startRow = dflNrow)
}
saveWorkbook(wb)
使用此脚本,数据框不会以空格或“名称”分隔,但标题行以灰色阴影显示。