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

Вопросы по статистическому пакету R. Не обязательно гео.
Ответить
Аватара пользователя
VistaSV30
Активный участник
Сообщения: 185
Зарегистрирован: 02 июл 2018, 15:05
Репутация: 7
Откуда: Балашиха

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

Сообщение VistaSV30 » 23 июн 2020, 14:17

Добрый день!

В таблице одно из значений даты 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. Это я так понимаю количество дней с начала отсчета.

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

Спасибо!
Природа не просто эксцентричнее, чем мы полагаем - она эксцентричнее, чем мы способны предположить. John Haldane

Аватара пользователя
VistaSV30
Активный участник
Сообщения: 185
Зарегистрирован: 02 июл 2018, 15:05
Репутация: 7
Откуда: Балашиха

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

Сообщение VistaSV30 » 23 июн 2020, 14:40

Нашел ответ.
origin - это начало отсчета времени. В данном случае UNIX-времени - 1 января 1970 года.
И соответственно код будет:

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

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

Аватара пользователя
antonv
Активный участник
Сообщения: 229
Зарегистрирован: 29 ноя 2016, 10:44
Репутация: 114
Откуда: Санкт-Петербург

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

Сообщение antonv » 23 июн 2020, 17:25

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

nickleb
Гуру
Сообщения: 964
Зарегистрирован: 22 май 2010, 20:20
Репутация: 154

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

Сообщение nickleb » 24 июн 2020, 08:48

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"

Ответить

Вернуться в «R»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 10 гостей