2016-07-28 8 views
0

Ich habe einen Datenrahmen, den ich ein paar Analysen ausführen und ich möchte die Ergebnisse in Excel-Dateien exportieren. Eine Arbeitsmappe pro Gruppe und jede Analyse wird auf einer separaten Registerkarte angezeigt. Ich würde bevorzugen, für den Export zu verwenden, um Java aus der Gleichung herauszunehmen.Liste der Datenrahmen in Excel in mehreren Blättern schreiben

library(plyr) 
library(dplyr) 
library(openxlsx) 

df <- iris 

# Analysis 1 
results1 <- df %>% 
    group_by(Species) %>% 
    summarise(count = n()) 

# Analysis 2 
results2 <- df %>% 
    group_by(Species) %>% 
    summarise(mean.sl = mean(Sepal.Length), 
      mean.sw = mean(Sepal.Width)) 

Meine gewünschte Export Ausgabe drei Excel-Dateien sein würde, setosa.xlsx, versicolor.xlsx und virginica.xlsx; jeweils mit zwei Blättern "results1" und "results2", die nur ihre Ergebnisse innerhalb der Gruppe enthalten. Keine setosa Zeilen in der versicolor Excel Datei.

Ich versuchte results1 und results2 in Listen von Datenrahmen, um zu spalten lappy mit write.xlsx zu verwenden, aber ich bin nicht in der Lage es funktioniert.

r1_list <- dlply(results1, .(Species)) 
r2_list <- dlply(results2, .(Species)) 

Weitere Vorschläge?

+1

Mein Vorschlag, nicht hilfreich, da es sein kann, ist nicht Excel zu verwenden. –

+0

Ich glaube auch das ['xlsx' Paket] (https://cran.r-project.org/web/packages/xlsx/xlsx.pdf) ist was Sie suchen –

+0

' xlsx' hängt von Java ab, was ich versuche zu vermeiden, wenn möglich –

Antwort

1

Beispielcode

library(plyr) 
library(dplyr) 
library(openxlsx) 


setwd("c:/r") 
df <- iris 

# Analysis 1 
results1 <- df %>% 
    group_by(Species) %>% 
    summarise(count = n()) 

# Analysis 2 
results2 <- df %>% 
    group_by(Species) %>% 
    summarise(mean.sl = mean(Sepal.Length), 
      mean.sw = mean(Sepal.Width)) 

#get the unique species 
sp <- unique(df$Species) 

createSpreadsheets <- function(species,r1,r2){ 
    ## Create new workbooks 
    wb <- createWorkbook() 

    ## Create the worksheets 
    addWorksheet(wb, sheetName = "Results1") 
    addWorksheet(wb, sheetName = "Results2") 

    ## Write the data 
    writeData(wb, "Results1", r1) 
    writeData(wb, "Results2", r2) 

    ## Save workbook to working directory 
    saveWorkbook(wb, file = paste(species,".xlsx", sep=""), overwrite = TRUE) 
} 

## create spreadsheets by calling our function for each species 
for(s in sp){ 
    createSpreadsheets(s,results1[results1$Species==s,],results2[results2$Species==s,]) 
} 
Verwandte Themen