这只是一个更大问题的一部分。
我有一个名为ABC_20120204.csv,ABC_20120205.csv和ABC_20120206.csv的文件列表。这是ABC_20120204.csv的快照:
更新:可以通过谷歌驱动器下载文件:https://drive.google.com/drive/folders/17Rq1Vx21VqZhwYKWl9HLWZzxoZh2mxIh?usp=sharing
或dropbox here https://www.dropbox.com/sh/q6c9w8kryn2by5z/AAD3rPnBgP5CyRy7E5eautJGa?dl=0
X.1 X x X2
1 1 1 0.0137 2
2 2 2 0.0059 3
3 3 3 0.0174 4
4 4 4 0.0073 5
5 5 5 0.0144 6
6 6 6 0.0103 7
7 7 7 0.0070 8
8 8 8 0.0017 9
9 9 9 0.0010 10
每个文件有3列,但每行有不同的行数:第一行有864行,第二行有1081行,第三行有1439行。
我正在尝试按分钟在每个文件中应用时间戳,因此最后每个文件将有1440行。
到目前为止,从我与另一位论坛成员的讨论开始,我已经尝试使用补充数据:
fnames<-list.files(pattern="ABC")
first <- TRUE
times <- c("00:00", "23:59")
for (fn in fnames) {
thisdate <- gsub(".*(20[0-9]{6}).csv", "\\1", fn)
twotimes <- as.POSIXct(paste(thisdate, c("00:00", "23:59")), format = "%Y%m%d %H:%M")
allminutes <- data.frame(X2 = seq(twotimes[1], twotimes[2], by="min"))
dat <- read.csv(fn, stringsAsFactors=FALSE)
dat$X2 <- as.POSIXct(paste(thisdate, dat$X2), format = "%Y%m%d %H:%M")
dat <- merge(dat, allminutes, by="X2", all=TRUE)
write.table(dat, "alldata.csv", append=!first,
col.names=first, row.names=FALSE, sep=",", na="")
first <- FALSE
代码与虚拟数据(How to automate data importing, add time stamp, and standardize the number of rows in data files in R)完美配合。 但是,当我应用我的真实数据集时,此行停止工作
dat$X2 <- as.POSIXct(paste(thisdate, dat$X2), format = "%Y%m%d %H:%M")
而不是显示为日期和时间,列X2中只有NA。
X.1 X x X2
1 1 1 0.0137 NA
2 2 2 0.0059 NA
3 3 3 0.0174 NA
4 4 4 0.0073 NA
5 5 5 0.0144 NA
6 6 6 0.0103 NA
7 7 7 0.0070 NA
8 8 8 0.0017 NA
9 9 9 0.0010 NA
我尝试了另一种方法,改为使用以下代码:
dat$X2 <- seq(twotimes[1], twotimes[2], by="min")
但它表示行数不一样。我也试过merge,cbind,做了一个新的data.frame,但这一切归结为一个错误:不同的行数。
我也试过
time <- seq(twotimes[1], twotimes[2], by="min")
M<-merge(dat, time)
这次合并了数据和时间,但行是文件A,B和C的时间戳累积(大约200万行,原因未知)。
任何人都可以在那里提供一些提示:
dat$X2 <- as.POSIXct(paste(thisdate, dat$X2), format = "%Y%m%d %H:%M")