2016-07-28 81 views
0

我有一个数据框,我运行了一些分析,并且想将结果导出到Excel文件。一个工作簿每个组和每个分析结果在一个单独的选项卡上。我宁愿使用openxlsx来导出,以便将java排除在等式之外。在多个工作表中将数据框清单写入Excel

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

我期望的出口量将有三个Excel工作簿,setosa.xlsxversicolor.xlsx,并virginica.xlsx;每个都有两张工作表“results1”和“results2”,其中只包含他们的组内结果。意味着杂色Excel文件中没有setosa行。

我试图results1results2分割成数据帧的列表,以便使用lappywrite.xlsx,但我不能使它发挥作用。

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

其他建议?

+1

我的建议,无益的,因为它可能是不使用Excel。 –

+0

另外,我相信['xlsx'包](https://cran.r-project.org/web/packages/xlsx/xlsx.pdf)就是你要找的 –

+0

'xlsx'依赖于java,我试图避免,如果可能的话 –

回答

1

示例代码

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,]) 
} 
相关问题