我的情况:
我想要实现的目标:
在R中嵌入此脚本的正确方法是什么?对不起,我是编程菜鸟!
我的脚本代码如下...每个CSV中每列的标题是DATE,TIME,VALUE
# Pull in Data from the FileSystem and attach it
AA01raw<-read.csv("AA01.csv")
attach(AA01raw)
#format the data for timeseries work
cdt<-as.character(Date)
ctm<-as.character(Time)
tfrm<-timeDate(paste(cdt,ctm),format ="%Y/%m/%d %H:%M:%S")
val<-as.matrix(Value)
aa01tsobj<-timeSeries(val,tfrm)
#convert the timeSeries object to an xts Object
aa01xtsobj<-as.xts(tsobj)
#remove all the intermediate objects to leave the final xts object
rm(cdt)
rm(ctm)
rm(aa01tsobj)
rm(tfrm)
gc()
Run Code Online (Sandbox Code Playgroud)
然后在每个.csv文件上重复,直到提取所有xts对象.
也就是说,我们最终将在R内,准备进一步应用是:
aa01xtsobj, ab01xtsobj, ac01xtsobj....etc
Run Code Online (Sandbox Code Playgroud)
任何有关如何做到这一点的帮助将非常感激.
Tho*_*mer 17
请务必使用Rs dir命令生成文件名列表,而不是手动输入文件名.
filenames = dir(pattern="*01.csv")
for( i in 1:length(filenames) )
{
...
Run Code Online (Sandbox Code Playgroud)
我找到一个for循环,列表就足够了这样的东西.一旦你有了一组工作代码,就可以很容易地从一个循环转移到一个可以sapplyor或类似的函数,但这种矢量化无论如何都是特殊的,并且在私有的单行之外可能没用.
您可能希望避免在工作区中分配多个具有不同名称的对象(这是一个常见问题解答,通常会出现为"我如何分配()...".
请注意我未经测试的代码.
文件名向量,以及每个文件的命名元素列表.
files <- c("AA01.csv", "AA02.csv")
lst <- vector("list", length(files))
names(lst) <- files
Run Code Online (Sandbox Code Playgroud)
循环遍历每个文件.
library(timeSeries)
for (i in 1:length(files)) {
## read strings as character
tmp <- read.csv(files[i], stringsAsFactors = FALSE)
## convert to 'timeDate'
tmp$tfrm <- timeDate(paste(tmp$cdt, tmp$ctm),format ="%Y/%m/%d %H:%M:%S"))
## create timeSeries object
obj <- timeSeries(as.matrix(tmp$Value), tmp$tfrm)
## store object in the list, by name
lst[[files[i]]] <- as.xts(obj)
}
## clean up
rm(tmp, files, obj)
Run Code Online (Sandbox Code Playgroud)
现在所有的读取对象都在lst,但是您需要测试该文件是否可用,是否已正确读取,并且您可能希望将名称修改为比文件名更合理.
从列表中按名称索引打印出第一个对象:
lst[[files[1]]]
Run Code Online (Sandbox Code Playgroud)