Страница 1 из 1

Исправить значения NA даты

Добавлено: 23 июн 2020, 14:17
VistaSV30
Добрый день!

В таблице одно из значений даты df$fn равно NA. Нужно его исправить на дату df$st

Код: Выделить всё

st <- as.Date(c("2019-01-15", "2019-01-09", "2019-01-09"))
fn <- as.Date(c("2019-01-16", NA, "2019-01-09"))
df <- data.frame(st, fn)

df$fn <- ifelse(is.na(df$fn) == F, df$fn, df$st)
Проблема в том, что формат df$fn в результате получается numeric.

Как преобразовать его обратно в Date?
Функция as.Date() просит указать 'origin'. Значения df$fn получаются следующего вида 17912. Это я так понимаю количество дней с начала отсчета.

Вообще, есть ли простой и правильный способ решить мою задачу?

Спасибо!

Re: Исправить значения NA даты

Добавлено: 23 июн 2020, 14:40
VistaSV30
Нашел ответ.
origin - это начало отсчета времени. В данном случае UNIX-времени - 1 января 1970 года.
И соответственно код будет:

Код: Выделить всё

as.Date(df$fn, origin = "1970-01-01")
Подскажите как преобразовать текст, например, "16:40" в формат времени. Есть для этого базовая функция?

Re: Исправить значения NA даты

Добавлено: 23 июн 2020, 17:25
antonv
VistaSV30, отдельного формата времени не существует, есть только дата вместе со временем.
Как вы поняли, это просто число - время в миллисекундах от условного начала отсчета, поэтому без даты никак не обойтись.
Той же самой функцией Date можете распарсить строку, в которой сразу будет записана и дата, и время:
пример здесь

Re: Исправить значения NA даты

Добавлено: 24 июн 2020, 08:48
nickleb
VistaSV30 писал(а):
23 июн 2020, 14:40
Подскажите как преобразовать текст, например, "16:40" в формат времени. Есть для этого базовая функция?
... строка кода без указания даты, но со временем:

Код: Выделить всё

as.POSIXct("16:40", format = "%H:%M")
вернёт Вам текущую дату со временем 16 час. 40 мин.:

Код: Выделить всё

[1] "2020-06-24 16:40:00 MSK"
строка кода с указанием и даты, и времени:

Код: Выделить всё

as.POSIXct("24 Июн 1945 16:40", format = "%d %B %Y %H:%M")
вернёт:

Код: Выделить всё

[1] "1945-06-24 16:40:00 MSK"