Когда я использую команду as.POSIXct, столбец становится пустым - PullRequest
0 голосов
/ 01 июня 2018

Это только одна часть гораздо более серьезной проблемы.

У меня есть список файлов с именами 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") 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...