Ich schreibe derzeit mehrere Datenrahmen auf 1 Blatt mit , jeweils mit einer schönen offenen Spalte zwischen ihnen. Ich möchte die Datenframes auf dieses einzelne Blatt schreiben, so wie ich sie alle auf einem Blatt zur Analyse haben möchte und nicht 10 Blätter durchlaufen muss, um dies zu tun.Bessere Möglichkeit zum Schreiben einer Spalte starten Update-Funktion beim Schreiben in xlsx
Mein Spielzeug-Datensatz sieht wie folgt aus:
> 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
Jetzt erstelle ich meine Arbeitsmappe und Arbeitsblatt und erstellen 3 verschiedene data.frames
, die zu meiner xlsx
Datei geschrieben werden.
library(openxlsx)
wb <- createWorkbook()
addWorksheet(wb,sheetName = "Output")
df1 <- random_dat[,1:2]
df2 <- random_dat[,2:3]
df3 <- random_dat[,3:7]
Ich bin jetzt bereit, diese meine Datei zu dem Schreiben beginnen:
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")
Wie Sie sehen können, nach jeder schreiben, ich habe die Startspalte aktualisieren dim()
der Daten verwenden und 1 hinzufügen zu Lassen Sie eine leere Spalte zwischen data.frames
.
ISNT es einen einfacheren Weg, um eine globale Funktion zu schaffen, die die Spaltenzählervariable für mich nur immer die zuletzt geschriebenen data.frame
als Eingabe, zum Beispiel auf einfache Weise aktualisieren könnte:
update_col<-function(df,envir = .GlobalEnv)
{
if(!("start_col" %in% ls())) start_col<<-1
start_col<<-start_col + dim(df)[2]
}
update_col(df1)
Danke, das ist genau das, was ich wollte, wie ich speichere Meine Datenframes zu einem Listenobjekt, auf das ich diese Funktion nun anwenden kann –