2013-10-23 21 views
1

我有數據幀的列表:寫多個數據幀的一個XLS片

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

你想如何對齊列(例如,所有左對齊)?將它們全部組合成一個矩陣然後編寫它們可能更容易。 – Thomas

+0

@Thomas列對齊不是那麼重要,但我寧願右對齊,因爲大多數列都是數字。 –

+0

對不起,我不清楚。我的意思是說,因爲你有不同數量的列,所以每個數據幀的列落在相對於將放置在表格上方或下方的數據框列的位置是否重要? – Thomas

回答

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 
+0

我認爲這是正確的方向,但目前它會產生很多警告,並且如果您檢查結果,某些列名不存在。 –

+0

@TomasGreif警告是因爲您的數據框包含因素。它本身與解決方案無關。是的,這是不完美的,但可能會讓你朝着正確的方向前進。 – Thomas

+0

我修改了您的答案 - 固定因子處理並將數據框名稱添加到結果中。謝謝你的幫助。 –

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) 

使用此腳本,數據框不會被空格或「名稱」分隔,但標題行會被加灰顯示。

相關問題