Это только одна часть гораздо более серьезной проблемы.
У меня есть список файлов с именами ABC_20120204.csv, ABC_20120205.csv и ABC_20120206.csv.Вот снимок обновления ABC_20120204.csv:
: файлы можно скачать с помощью Google Drive здесь: https://drive.google.com/drive/folders/17Rq1Vx21VqZhwYKWl9HLWZzxoZh2mxIh?usp=sharing
или Dropbox здесь 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 столбца, но каждый имеет различное количество строк: 1-й имеет 864 строки, 2-й имеет 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
код прекрасно работает с фиктивными данными ( Как автоматизировать импорт данных, добавить метку времени и стандартизировать количество строк в файлах данных в 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")
, но он говорит, что количество строк не совпадает.Я также попытался слить, cbind, сделал новый data.frame, но все сводится к одной ошибке: разное количество строк.
Я также пытался
time <- seq(twotimes[1], twotimes[2], by="min")
M<-merge(dat, time)
, и на этот раз дата и время слились, но строки - это накопление меток времени из файлов A, B и C (около 2 миллионов строк по причинамнеизвестно).
Любой может дать несколько советов по этой теме:
dat$X2 <- as.POSIXct(paste(thisdate, dat$X2), format = "%Y%m%d %H:%M")