2017-05-26 67 views
0

我的問題很簡單,有很多「答案」與lapply給我的東西,我不是在尋找。它們沒有用處,因爲我得到一個列表,然後必須做另一個循環來獲取數據框,並且遇到同樣的問題:使用序列化名稱一次創建多個數據框。這就是爲什麼我要問一個新問題。R導入excel,從列表創建幾個數據幀使用循環

我有一個Excel文件5張不同的圖表,我想創建5個不同的數據框。

library(openxlsx) 

ln=list() 
for (i in 2:6) 
    { 
ln[[i]]<-read.xlsx("File.xlsx", sheet=i-1, startRow=3) 

} 

然後,我知道我可以做:

mo_1<-data.frame(ln[[2]]) 

,它看起來像它會給我正確的表文件。 但是,我需要爲所有工作表執行此操作。我的嘗試是:

for (i in 2:6){ 
    mo_[i]<-data.frame(ln[[i]]) 
} 

這就給我帶來了和以前一樣的問題。 P

所以我需要5個文件:mo2,...,mo6,我希望它們是DATAFRAMES(不是列表)。

謝謝。

只是爲了補充爲什麼其他解決方案不起作用: - 他們似乎沒有製作框架,他們似乎在不停地製作列表,看起來我必須手動進行轉換。

另一種表述這個問題的方法是如何使用循環從列表創建數據幀。

+0

提的是現有的答案,在那裏沒有解釋爲什麼他們不幫忙,是沒有用的。 –

+0

更好,但如果不解釋哪些解決方案無法解釋哪些措施,則仍難以說明您所指的內容。 –

+0

您的變量'ln'是數據框的列表,因此最容易以'ln [[]]'符號訪問每個數據框。如果你真的想使用一系列新的變量名,那麼使用'assign'函數。看到相關的帖子:https://stackoverflow.com/questions/24699989/r-dynamically-create-a-variable-name。我相信:'assign(paste0(「mo」,i),ln [[i]])是你正在尋找的東西。 – Dave2e

回答

0

重新考慮lapply解決方案,因爲您可以使用list2env將已命名的數據幀列表中的元素輸出到單獨的對象中。只要確保命名與setNames之前的元素:

library(openxlsx) 

ln <- lapply(2:6, function(i) read.xlsx("File.xlsx", sheet=i-1, startRow=3))  
ln <- setNames(ln, paste0("mou_", 1:5)) 

list2env(ln, envir=.GlobalEnv) 

隨着中說,有沒有真正的理由有獨立對象的工作,你仍然可以使用列表DF操作,尤其是當你評論可以有50這些數據框聽起來像是保持着類似的結構。只是管理一個對象,而不是很多:

merge(ln$mou_1, ln$mou_2, by="id") 

aggregate(.~group1 + group2, ln$mou_3, FUN=sum) 

rbind(ln$mou_4, ln$mou_5) 
+0

非常感謝您的回答,但這並沒有解決這個問題。 – Allan

+0

這爲什麼不解決這個問題?你是否運行過代碼?如圖所示,'lapply'將Excel工作表導入數據框列表,其中'list2env'輸出列表元素以分離數據框對象。這正是答案,*如何使用循環從列表創建數據框。*順便說一下,'lapply'是一個循環! – Parfait

相關問題