2016-05-19 8 views
0

現在、openxlsxを使って1つのシートに複数のデータフレームを作成しています。私はこのシートにデータフレームを書きたいと思っています。分析するシートをすべて1枚にしたいので、10枚にする必要はありません。次のようにxlsxに書き込むときに列開始更新関数を書く方が良い

私のおもちゃのデータセットが見えます:

> random_dat 
    Letters Count Letters.1 Count.1 Letters.2 Count.2 Final 
1  A  1  A1 0.21477659   Z  10 Z10 
2  A  2  A2 0.92217670   X  12 X12 
3  A  3  A3 0.49196523   T  14 T14 
4  B  1  B1 0.08086314   Y  16 Y16 
5  B  2  B2 0.80177983   Z  18 Z18 
6  A  4  A4 0.35970442   X  20 X20 
7  B  3  B3 0.21102868   T  22 T22 
8  C  1  C1 0.75816713   Y  24 Y24 
9  C  2  C2 0.59261425   Z  26 Z26 
10  D  1  D1 0.73484393   X  28 X28 
11  A  5  A5 0.32830008   T  30 T30 
12  C  3  C3 0.21672748   Y  32 Y32 

は今、私は私のワークブックおよびワークシートを作成し、私の xlsxファイルに書き込まれます3異なる data.framesを作成します。

library(openxlsx) 
wb <- createWorkbook() 
addWorksheet(wb,sheetName = "Output") 
df1 <- random_dat[,1:2] 
df2 <- random_dat[,2:3] 
df3 <- random_dat[,3:7] 

私は今、自分のファイルにこれらの書き込みを開始する準備ができています:

writeData(wb, sheet = "Output", df1, startCol = 1, startRow = 1, xy = NULL, 
      colNames = TRUE, rowNames = FALSE, headerStyle = NULL, withFilter = FALSE, 
      keepNA = FALSE) 
start_col <- 1 
start_col <- start_col+dim(df1)[2]+1 

writeData(wb, sheet = "Output", df2, startCol = start_col, startRow = 1, xy = NULL, 
      colNames = TRUE, rowNames = FALSE, headerStyle = NULL, withFilter = FALSE, 
      keepNA = FALSE) 

start_col <- start_col+dim(df1)[2]+1 

writeData(wb, sheet = "Output", df1, startCol = start_col, startRow = 1, xy = NULL, 
      colNames = TRUE, rowNames = FALSE, headerStyle = NULL, withFilter = FALSE, 
      keepNA = FALSE) 

start_col <- start_col+dim(df1)[2]+1 

saveWorkbook(wb, "output.xlsx") 

あなたが見ることができるように、各書き込みの後、私はデータのdim()を使用して開始列を更新してのとして1を追加空の列をdata.framesの間に置きます。

は、たとえば、入力として、最後に書き込まれdata.frameを取得して、簡単な方法で、私のために列カウンタ変数を更新することができ、グローバル関数を作成するための簡単な方法がイマイチ:テストされていない何か

update_col<-function(df,envir = .GlobalEnv) 
{ 
    if(!("start_col" %in% ls())) start_col<<-1 
    start_col<<-start_col + dim(df)[2] 
} 

update_col(df1) 

答えて

1

をし、今より良い何かが

mywriteData <- function(wb, sheet="output",df, first=TRUE,...){ 
    if first { 
    previous_Ncol <<- 0 
    start_col <<- 1 
    } 
    start_col <<- start_col+previous_Ncol 
    writeData(wb, sheet = "Output", df, startCol = start_col, ...) 
previous_Ncol <<- previous_Ncol + ncol(df) 
} 

:あなたはglobalEnv変数を示唆として使用してループ内でのカウンターをincremeting、ループ付きリストに基づいて、同等の機能をデータセットのリストを作成し、作成すること - このグローバルを使用して防ぎますENV(exerice)

あるいはさらに良い、data.frameのリストを持っている、とdo.call("cbind",dataframe_list)を使用する(彼らはすべての行の同じ数を持っていると仮定...)

+0

おかげで、これは私が保存していて、私が望んでいたまさにです私のデータフレームをリストオブジェクトに渡し、ここでこの関数を適用することができます –

関連する問題