0

嗨,我正在尝试遍历 excel 文件目录进行分析。

我的变量名为 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)


}
4

2 回答 2

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

但是您不必按名称引用它们,并且您可以通过使用lapplyetc遍历列表而受益。

我会使用类似的东西

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

但是因为这些都在一个列表中,所以你可以通过lapplyand co 对它们进行操作。

于 2013-07-22T20:11:06.507 回答
1

为什么不使用

files = list.files(DirFileName)

然后遍历它以将它们加载到R中?

使用文件名分配给对象:

objects = list()
objects[[files[1]]] = ...
于 2013-07-22T19:59:52.083 回答