2013-07-22 78 views
0

嗨我想循環通過Excel文件的目錄進行分析。R,R編程,循環目錄

我的變量名爲FileToGrab,它可以獲取excel文件的名稱。

我在哪裏以粗體顯示FileToGrab是我想要命名的數據框不是實際的FileToGrab數據框。

例FileToGrab = 2013ExcelSheet23

我希望我的數據幀將被命名2013ExcelSheet23而不是FileToGrab。

FileToGrab = 2013ExcelSheet24

我希望我的數據幀將被命名2013ExcelSheet24而不是FileToGrab。

FileToGrab = 2013ExcelSheet25

我希望我的數據幀將被命名2013ExcelSheet25而不是FileToGrab。

.....等等。

新來的R抱歉,如果這沒有意義。由於

x <- 1:50 
for(i in seq(along=x)) 
{ 


FileToGrab = gsub("(^ +)|(+$)", "",listofFile[i]) 
FileToGrab = str_replace_all(string=FileToGrab, pattern=" ", repl="") 

DirFileName = paste("C:\\Users\\w47593\\Desktop\\RProjects\\CallCenterProjectJuly2013\\Files\\",FileToGrab) 
DirFileName = str_replace_all(string=DirFileName, pattern=" ", repl="") 

file.name <- DirFileName 
sheet.name <- "Detail" 
FileToGrab = str_replace_all(string=FileToGrab, pattern=".xls", repl="") 


## Connect to Excel File Pull and Format Data 
excel.connect <- odbcConnectExcel(DirFileName) 
**FileToGrab** <- sqlFetch(excel.connect, sheet.name, na.strings=c("","-")) 
odbcClose(excel.connect) 


} 
+2

......我不確定,但以數字開頭的文件名可能不適合作爲R中的標識符;然而,函數'assign()'可能會幫助你將結果填充到一個變量序列中,這些變量的名字在執行時會被解決(所以你可能需要'assign(sprintf(「。Sheet。%s」,FileToGrab) ,sqlFetch(...))')。 – texb

回答

1

爲什麼不使用

files = list.files(DirFileName) 

,然後通過迭代將其加載爲R?

objects = list() 
objects[[files[1]]] = ... 
+0

確實。似乎你已經編輯過,因爲我評論過。 –

+1

你想要什麼,一陣掌聲?一旦我注意到你已經更新了你的答案,我就刪除了我的評論。你的回答很簡潔,我接近完整的解決方案,並帶有一些警告/解釋。兩者都會幫助OP,那麼愚蠢的態度呢? –

+0

我沒有偷獵!在我剛剛根據時間戳和我的帖子的長度回答之前,我明確地對我的工作很熟悉。當你的兩行答案彈出時,我沒有回答實際問題,我已經有效地完成了我的工作。同時,您編輯了您的答案,並在添加了一些內容後發佈了我的答案。如果我認爲你是一個更好的答案我會刪除我的(在http://stackoverflow.com/a/17797415/429846哪裏的答案都在同一時間工作,但我沒有提供新的東西,因此我刪除它)。 –

3

你可能希望把你的對象開始用數字,你將有你使用他們

> 11Foo <- 1 
Error: unexpected symbol in "11Foo" 
> `11Foo` <- 1 
> 11Foo 
Error: unexpected symbol in "11Foo" 
> `11Foo` 
[1] 1 
每次說出來了:

分配使用的文件名對象

像智慧一樣,我懷疑你想要25多個物體堵塞你的工作空間。更好的解決方案通常是將數據導入列表並使用這些對象。你有類似的問題與訪問名字

> ll <- list(`1` = 1, `2` = 2) 
> ll$1 
Error: unexpected numeric constant in "ll$1" 
> ll$`1` 
[1] 1 

但你並不需要的名字一定要指給他們,你將能夠遍歷使用lapply等列表中受益

我會使用類似

fs <- list.file("dir/to/excel/files", glob2rx("*.xls")) 
ll <- vector(mode = "list", length = length(fs)) 

for (i in seq_along(ll)) { 
    excel.connect <- odbcConnectExcel(fs[i]) 
    ll[[i]] <- sqlFetch(excel.connect, sheet.name, na.strings=c("","-")) 
    odbcClose(excel.connect) 
} 

names(ll) <- sub("\\.xls", "", fs) 

你仍然必須通過

ll$"2013ExcelSheet25" 

提取,但你也可以使用

ll[["2013ExcelSheet25"]] 

或更好

ll[[1]] 

甚至

ll[[which(names(ll) == "2013ExcelSheet25")]] 

但因爲這些都是在都包含一個單獨的列表,並且你可以通過lapply和合作對它們進行操作。

+0

你是對的,將這些轉移到列表中可能是更好的主意...... – texb