将更多数据帧写入一个XLS表

时间:2013-10-23 08:22:39

标签: r

我有一个数据框列表:

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")

2 个答案:

答案 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)

使用此脚本,数据框不会以空格或“名称”分隔,但标题行以灰色阴影显示。