2017-04-17 30 views
0

我正在使用R來以100多種方式拆分數據集,然後將拆分的數據集導出到模板中。具體來說,我使用XLConnect和DPLYR包來分割數據集,並創建一個列表。然後,我想將列表中的每個項目導出到「模板」(加載的工作簿)並將其保存爲唯一名稱。將導出列表作爲單獨的文件從已加載的工作簿中刪除

但是,我不知道如何使用唯一的名稱來保存。在我給出的例子中,代碼將每個項目保存爲相同的名稱。我需要改變工作簿的標題,以便我可以有100X文件。意思是,我想根據「LvL1_Mgr」名稱來改變工作簿的標題。思考?

Example Below. 

library(readxl) 
    SurveyDataRaw <- read_excel("~/SurveyDataRaw.xlsx") 

#distinct leaders 
library(dplyr) 
Leaders_in_file <- SurveyDataRaw %>% 
    distinct(Lvl1_Mgr) 

#store leader names as list 
Leaders_in_file <- as.list(Leaders_in_file) 

Sam2 <- SurveyDataRaw %>% 
     group_by(Lvl1_Mgr, Q_Short) %>% 
     summarise(Q_Responses = mean(Q_Response, na.rm=TRUE)) %>% 
     split(.,.$Lvl1_Mgr) 

#THis is where I get the problem. All files are being created successfully, 
but #the save over each other. 
for(i in Sam2){ 
    wb <- loadWorkbook("Test123456.xlsx", create = TRUE) 
    wb["TestSheetName"] = i 
    saveWorkbook(wb, Create=TRUE) 
} 
+0

鑑於我們沒有您的數據,這很難。你能輸入其中一個數據幀嗎?您是否嘗試將所有列表項目保存到新工作簿中的選項卡,或者爲每個列表項目創建一個新的工作簿? –

+0

*「要更改的工作簿的標題」*:是工作簿文件的名稱,還是工作簿中(單個?)工作表的名稱? – r2evans

+0

我找不到'readxl :: saveWorkbook'。您是否正在使用'openxlsx'? – r2evans

回答

0

也許其中一個會更適合你?

一個文件,每一個「模式」獲取工作簿中有自己的工作表:

library(openxlsx) 
wb <- loadWorkbook("Test123456.xlsx", create = TRUE) 
for (s in names(Sam2)) { 
    addWorksheet(wb, s) 
    writeDataTable(wb, s, Sam2[[s]]) 
} 
saveWorkbook(wb, "Test123456.xlsx", overwrite = TRUE) 

或許每個模型一個新的工作簿?

for (s in names(Sam2)) { 
    wb <- loadWorkbook("Test123456.xlsx", create = TRUE) 
    addWorksheet(wb, "SomeName") 
    writeDataTable(wb, "SomeName", Sam2[[s]]) 
    saveWorkbook(wb, sprintf("Test123456-%s.xlsx", s)) 
} 

編輯

潛在XLConnect版本,基於評論:

library(XLConnect) 
for (s in names(Sam2)) { 
    # if it's an already-created template, no need to 'create' 
    wb <- loadWorkbook("Test123456.xlsx", create = FALSE) 
    writeWorksheet(wb, Sam2[[s]], "SomeName") 
    saveWorkbook(wb) 
} 
+0

感謝您的代碼。但是,當我運行上述兩個建議時,它不起作用。我使用的是XLConnect,當我使用openxlsx時,saveworkbook和loadworkbook被屏蔽了.... – LeoTheLioin6789

+0

我明白了。我在'XLConnect'上遇到了一些問題,所以我遷移到'openxlsx'。有沒有你需要的東西不是後者提供的?只是想知道... – r2evans

+0

沒有特別的原因我正在使用XLConnect。我的主要目標是在Excel中創建一個模板(我發送給我的老闆的最終可交付成果),然後使用R來操縱數據並將其粘貼到Excel模板中。從本質上講,我需要100多個excel文件,看起來是一樣的,我得到的一切,但保存文件作爲一個獨特的名字....建議? – LeoTheLioin6789

0

感謝您的幫助。下面的最終代碼。

for (s in names(Sam2)) { 
     wb <- loadWorkbook("test.xlsx", create = FALSE) 
     writeWorksheet(wb, Sam2[[s]], "test") 
     saveWorkbook(wb, sprintf("%s.xlsx", s)) 
    } 
相關問題