您好,我正在尝试循环通过一个目录的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)
}发布于 2013-07-23 04:11:07
你可能不想命名你的对象以数字开头,因为你每次使用它们时都要用引号将它们引起来
> 11Foo <- 1
Error: unexpected symbol in "11Foo"
> `11Foo` <- 1
> 11Foo
Error: unexpected symbol in "11Foo"
> `11Foo`
[1] 1像wise一样,我怀疑您是否希望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和co对它们进行操作。
发布于 2013-07-23 03:59:52
为什么不使用
files = list.files(DirFileName)然后迭代将它们加载到R中?
使用文件名为对象赋值:
objects = list()
objects[[files[1]]] = ...https://stackoverflow.com/questions/17795657
复制相似问题