【发布时间】:2018-08-07 12:52:09
【问题描述】:
我正在尝试将最新的 .csv 从我的工作目录导入到 R。Adamant 这个方法以前有效,但似乎不再有效。
每天都会将一个 .csv 文件输出到我指定的文件夹,然后我将其导入 RStudio 进行操作。此文件夹中目前有 2 个文件。
代码及说明如下:
1) 以下代码检索目录中所有 csv 文件的名称。
# find filenames of all .csvs in directory
filenames <- Sys.glob("*.csv")
> filenames
[1] "February 26, 2018 at 03:59PM myfile.csv" "February 26, 2018 at 04:00PM myfile.csv"
2) 下一步是从文件名字符串中删除多余的信息,只保留日期信息:
# remove redundant file info
newdates <- sub("at.*", "", filenames)
> newdates
[1] "February 26, 2018 " "February 27, 2018 "
3) 然后我从日期中删除逗号
# remove comma from date string
newdates <- gsub('\\$|,', '', newdates)
> newdates
[1] "February 26 2018 " "February 27 2018 "
4) 在这一步中我改变了日期格式
# change to short date format
betterdate <- as.Date(newdates,format = "%B %d %Y")
> betterdate
[1] "2018-02-26" "2018-02-27"
5) 然后我将 max(betterdate) 设置为最新文件
# takes latest file name as most recent file
latestfile <- max(betterDates)
> latestfile
[1] "2018-02-27"
6) 最后我导入了这个文件
# import file with latest date
rawfile <- read.csv(file=latestfile, header=TRUE, sep=",")
正如我所说,以前这个不雅的解决方案按设计工作,但几周后我现在收到此错误消息。
read.table 中的错误(file = file,header = header,sep = sep,quote = quote,: 'file' 必须是字符串或连接
是否可以解释问题是什么以及我如何才能以更好的方式进行整个工作?
【问题讨论】:
-
您将日期传递给
read.table(检查class(latestfile))。您需要将文件名作为与该日期对应的字符值传入。我看不出这会如何运作。在寻求帮助时,您应该包含一个简单的reproducible example,其中包含示例输入和所需的输出,可用于测试和验证可能的解决方案。给出dput()的filenames并将代码放在一起,以便我们可以轻松地复制/粘贴到R 中进行测试。 -
两件事:1)不知何故,您的两个文件以不同的日期开始,以相同的日期结束。 2)
lastestfile不是文件名,而是最大日期,您需要根据日期重建文件名或按照filenames[which.max(betterdates)的行进行操作以获取文件名 -
@emilliman5 抱歉,文件日期已更正。如果我执行以下操作,您的解决方案似乎有效:
x <- read.csv(file=filenames[which.max(betterdates)], header=TRUE, sep=",") -
@emilliman5 完全理解这个问题。我很乐意接受这个作为答案,因为这正是我所需要的。谢谢你
-
@MrFlick 我听到了。今天下午在运行代码时发现错误后,我也对它如何工作感到困惑,但确实如此。也许我无意中修改了代码并省略了一个步骤。现在我将按照@emilliman5 的建议合并
filenames[which.max(betterdates),谢谢你们的时间。非常感谢。