Как читать в файле Excel, когда дата и время в одном столбце в R

Я пытаюсь прочитать файл Excel в R. Среди других полей в файле Excel есть два поля «даты», каждое из которых содержит метку даты и времени в ЖЕСТКОМ поле.

Пример:

StartDate 9/14/2019 10:18:59 AM
EndDate 9/18/2019 2:27:14 AM

Когда я попытался прочитать read_excel в файле excel, фрейм данных очень странно отформатировал эти два столбца. Выплюнул дни (с десятичными знаками). Например, 43712.429849537039, который, как я думал, был в днях с 1 января 1970 года (дата происхождения, которая всплыла, когда я набрал lubrudate :: origin).

data %<>%    
  mutate(StartDate = as.Date(StartDate, origin = "1970-01-01 UTC"))

Поэтому я попытался преобразовать это обратно, используя as.Date, но он преобразует его в совершенно неправильную дату ... (преобразует все даты в 2089 год). Например, 2089-09-05.

Любая помощь с этим будет очень признательна! Должен быть более простой способ прямого чтения в столбце даты и времени ?!


person NewBee    schedule 08.11.2019    source источник
comment
Если это файл Windows, его происхождение - 30 декабря 1899 года.   -  person Dave2e    schedule 08.11.2019
comment
метка даты и времени в ОДНОМ поле ... некоторые (например, я) возразят, что это совершенно нормально и правильно обозначили метку времени. Очень редко я имею дело с данными, где я хочу сохранить дату и время как отдельные объекты. (Но это только я.)   -  person r2evans    schedule 08.11.2019


Ответы (2)


Вы можете использовать пакет lubridate, он отличный:

library(tidyverse)

df  <- data.frame(StartDate  =c("9/14/2019 10:18:59 AM","9/14/2019 3:18:59 PM"), 
                  EndDate= c("9/18/2019 2:27:14 AM","9/18/2019 1:27:14 PM"))


df <- df %>% mutate(StartDate = lubridate::mdy_hms(StartDate), EndDate = lubridate::mdy_hms(EndDate))
person Derek Corcoran    schedule 08.11.2019
comment
Благодарю за ваш ответ! Моя проблема в том, что как только я прочитал файл Excel в R, дата начала больше не в этом формате мм / дд / Y. Это занимает количество дней или что-то в этом роде ... Итак, начальная дата в рамке даты, которую я прочитал, будет: 43712.429849537039. - person NewBee; 08.11.2019
comment
Если вы используете read_excel для импорта данных, вы можете использовать аргумент col_types для импорта в качестве символа переменных StartDate и EndDate. Таким образом, вы можете использовать lubridate, как говорит @DerekCorcoran. - person MalditoBarbudo; 08.11.2019

Оказывается, что Excel имеет "дату происхождения", отличную от R. Excels считает дни с 01.01.1900, а R считает дни с 01.01.1970.

Когда я использовал read_excel для чтения файла в df, R использовал подсчет дней в excels. Вот почему у меня получилась странная дата, когда я попытался преобразовать ее в формат даты, используя 1970. Как только я использовал as.Date с датой "происхождения" в Excel 1990 (дата происхождения в Excel), мои даты были правильно проанализированы!

person NewBee    schedule 08.11.2019