我尝试使用此代码使用read.zoo读取多个CSV文件,但我遇到了问题。方向不同所以我使用了file.path()
。问题是:Date.Time到原始文件的日期为format= "%m/%d %HH:%MM:%SS"
,我需要在"%Y/"
函数之前或之内添加read.zoo()
。我怎么能这样做?我尝试使用子函数,但我需要一个参数。哪一个?是否有可能绕过这个问题?
library(zoo)
for(i in Dir1){
filepath <- file.path(paste(i,".csv",sep=""))
#f<-function(x) sub("([[:print:]]{15})$", "2005/\\1",x)
dat<-read.zoo(filepath,header=TRUE,sep=",",
FUN = function(x) sub("([[:print:]]{15})$", "2005/\\1"))
filenames <- substr(filepath,122,155)
names <-substr(filenames,1,21)
assign(names, dat)
}
Some of my data:
Date.time,Outdoor Dry Bulb [C],Outdoor Relative Humidity [%],Air Temperature [C],Surface Temperature [C]
01/01 00:03:00,0.0,50.,23.,16.3588068633603
01/01 00:06:00,0.0,50.,23.,16.1696661072302
01/01 00:09:00,0.0,50.,23.,13.8864861630478
01/01 00:12:00,0.0,50.,23.,13.006618496734
01/01 00:15:00,0.0,50.,23.,12.5542552024807
01/01 00:18:00,0.0,50.,23.,11.6201669301972
答案 0 :(得分:3)
我认为你想从R的角度考虑这个问题,并且paste()
将字符串放在一起而不是使用正则表达式,这在这里是有点过分的。例如::
f <- function(x, format) {
as.POSIXct(paste0("2005/", as.character(x)), format = format)
}
然后打电话给:
read.zoo(filepath, format = "%Y/%m/%d %H:%M:%S", header=TRUE,
sep=",", FUN = f)
f()
要解释f()
,请注意read.zoo()
将从读入的文件中传递FUN
index.column
列。这将是一个字符向量或一个因子(取决于包含您文件中数据的设置。因此,我们可以通过as.character(x)
强制转换为字符(x
是我们用来引用index.column
中的数据的内容。接下来,我们将字符串"2005/"
粘贴到文件index.column
的{{1}}列中的数据上。我使用x
作为我们想要的paste0()
,这是一种快速的方法。
最后一步是将结果字符向量转换为R的适当DateTime类。我使用paste(...., sep = "")
。 as.POSIXct()
确保将read.zoo()
参数传递给format
,以便我们可以使用FUN
,并将其传递给f()
的{{1}}参数format
函数,以便它理解我们传递它的日期时间信息的结构。
以下是一个例子:
as.POSIXct()
好了,现在假设set.seed(1)
dat <- data.frame(Index = seq(Sys.time(), by = "2 hours", length = 50),
Data = rnorm(50))
dat <- transform(dat, Index = strftime(Index, format = "%m/%d %H:%M:%S"))
head(dat)
> head(dat)
Index Data
1 10/17 12:53:35 -0.6264538
2 10/17 14:53:35 0.1836433
3 10/17 16:53:35 -0.8356286
4 10/17 18:53:35 1.5952808
5 10/17 20:53:35 0.3295078
6 10/17 22:53:35 -0.8204684
## write to file
write.csv(dat, file = "mydata.csv", row.names = FALSE)
是你的数据文件,使用上面的mydata.csv
函数和用户函数read.zoo()
读取它:
f
给出:
myzoo <- read.zoo("mydata.csv", format = "%Y/%m/%d %H:%M:%S",
header = TRUE, sep = ",", FUN = f)
head(myzoo)