Преобразовать формат мм / дд / гггг в дату в R - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть этот набор данных в базе данных доступа:

Sample <- structure(list(SampleRowID = 164:173, StationCode = c("Gate 1", 
"Gate 1", "Gate 1", "Gate 1", "Gate 1", "Gate 1", "Gate 1", "Gate 1", 
"Gate 1", "Gate 1"), SampleDate = c(777427200, 777427200, 777513600, 
 777513600, 777600000, 777772800, 777859200, 777859200, 777859200, 
 777945600), SampleTime = c(-2209132440, -2209108440, -2209131900, 
-2209106280, -2209131420, -2209107120, -2209132140, -2209123680, 
-2209105800, -2209130640), MethodCode = c("RSTR", "RSTR", "RSTR", 
"RSTR", "RSTR", "RSTR", "RSTR", "RSTR", "RSTR", "RSTR"), SampleID = 
c("233_94", 
"234_94", "234_94", "235_94", "235_94", "238_94", "238_94", "239_94", 
"239_94", "239_94")), .Names = c("SampleRowID", "StationCode", 
"SampleDate", "SampleTime", "MethodCode", "SampleID"), class = "data.frame", 
row.names = c(NA, 
-10L)) 

SampleRowID StationCode SampleDate  SampleTime MethodCode SampleID
      164      Gate 1  777427200 -2209132440       RSTR   233_94
      165      Gate 1  777427200 -2209108440       RSTR   234_94
      166      Gate 1  777513600 -2209131900       RSTR   234_94
      167      Gate 1  777513600 -2209106280       RSTR   235_94
      168      Gate 1  777600000 -2209131420       RSTR   235_94
      169      Gate 1  777772800 -2209107120       RSTR   238_94
      170      Gate 1  777859200 -2209132140       RSTR   238_94
      171      Gate 1  777859200 -2209123680       RSTR   239_94
      172      Gate 1  777859200 -2209105800       RSTR   239_94
      173      Gate 1  777945600 -2209130640       RSTR   239_94

SampleDate имеет формат 01/04/2014, однако при импорте в R мои столбцы SampleDate преобразуются в числовые значения. Я использовал:

      Sample$SampleDate <- as.Date(Sample$SampleDate, "%m/%d/%Y")

но это не работает, я получаю ошибку:

      Error in as.Date.numeric(as.numeric(Sample$SampleDate, "%m/%d/%Y",  
      'origin' must be supplied

Тогда я поставил происхождение так:

       Sample$SampleDate <- as.Date(as.numeric(Sample$SampleDate, 
       "%m/%d/%Y",origin="01-01-1970"))

и получите эту ошибку:

          Error in as.Date.numeric(as.numeric(Sample$SampleDate, "%m/%d/%Y", 
          origin = "1870-01-01")) : 
          'origin' must be supplied

Происхождение игнорируется. Когда я импортирую свой набор данных из Access, формат даты меняется на «двойной» формат. Как я могу конвертировать обратно в исходный формат даты? Любая помощь приветствуется.

     UPDATE:

Моя таблица импортируется в R через MS Access ->, а затем сохраняется в базе данных sqlite. Затем из R я подключаюсь к базе данных sqlite и импортирую таблицу Sample в рабочую область R. Я думаю, что sqlite разрушает мой формат SampleDate. Если я сохраню свою таблицу «Sample» в формате csv и импортирую ее в R, тогда as.Date будет работать хорошо. Я мог бы предоставить базе данных весь код R, который использовал, если кто-то заинтересован в воссоздании моей проблемы. Я просто не могу воспроизвести вышеупомянутое здесь, потому что я не знаю, как разместить базу данных доступа.

1 Ответ

0 голосов
/ 18 ноября 2018
   Sample$SampleDate <- as.Date(as.numeric(Sample$SampleDate, 
   "%m/%d/%Y",origin="01-01-1970"))

Здесь вы вызвали аргумент origin в as.numeric вместо as.Date. Но это на самом деле не имеет значения, так как результат не точен.

> as.Date(as.numeric(Sample$SampleDate, "%m/%d/%Y"), origin="01-01-1970")
 [1] "2128524-06-06" "2128524-06-06" "2128760-12-26" "2128760-12-26" "2128997-07-16" "2129470-08-26"
 [7] "2129707-03-17" "2129707-03-17" "2129707-03-17" "2129943-10-06"

Ваш SampleDate формат даты и времени выглядит как эпоха UNIX, поэтому as.POSIXct будет более подходящим.

> as.Date(as.POSIXct(Sample$SampleDate, origin="1970-01-01"))
 [1] "1994-08-21" "1994-08-21" "1994-08-22" "1994-08-22" "1994-08-23" "1994-08-25" "1994-08-26"
 [8] "1994-08-26" "1994-08-26" "1994-08-27"

Что выглядит более уместным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...