Дата и время синтаксического анализа из импорта xlsx - PullRequest
1 голос
/ 18 июня 2020

У меня есть столбец дат со следующим форматом в excel: MM / DD / YY AM или MM / DD / YY PM, и я смог проанализировать эту дату после импорта с помощью readxl :: read_excel.

parse_date_time(x, '%m/%d/%y %p', tz = "UTC")

Теперь, если бы я хотел вместо этого ввести ММ / ДД / ГГ ЧЧ: ММ PM, импорт будет в виде числа. Например.

"3/16/20 3:00 PM" becomes 43906.625 after import.

Одним из решений было бы импортировать столбцы даты в виде строк, однако у меня в файле 50 столбцов, и я не хочу жестко кодировать каждый тип столбца. Есть ли способ получить дату и время из этого числового значения (например, 43906,625)?

1 Ответ

3 голосов
/ 18 июня 2020

В Excel используется формат «день-целое число». R использует «целое число секунд» для времени и «целое число дня» для Date, поэтому в зависимости от того, в какой класс вы конвертируете, вам необходимо указать день в секундах (86 400). Также стоит знать, что Excel использует «происхождение» с 1899 года (год).

as.POSIXct(43906.625 * 86400, origin = "1899-12-30", tz = "UTC")
# [1] "2020-03-16 15:00:00 UTC"

Немного истории: причина, по которой это "1899-12-30", а не, скажем, "1899-12-31" (конец дня?) или что-то еще упомянуто в сообщении блога за 2013 год:

Для Excel на Windows дата происхождения 30 декабря 1899 года для дат после 1900 года. ( Разработчик Excel подумал, что 1900 год был високосным, но это не так.) Для Excel на c датой происхождения является 1 января 1904 года.

Я не знаю канонической ссылки для этого, и веб-сайт, с которого R-Bloggers заимствовали / скопировали эту статью, не отвечает. Я бы предпочел, чтобы для этого утверждения (о том, что инженеры ошибочно определили високосный год) все еще действующие и более канонические ссылки.

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