2013-07-22 36 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