#r #date
Вопрос:
Я импортирую CSV-файл со столбцом дат, и некоторые из дат предшествуют 1/1/1900. Я пытаюсь создать столбец в своем фрейме данных с датами в формате %m-%d-%Y, но мои усилия возвращают пустые ячейки. Ниже приведен пример. Спасибо за любую помощь.
id <- c(1,2,3)
dates <- c(44321, 1, "December 25, 1890")
df <- data.frame(id, dates)
View(df)
df$dates2 <- as.Date(df$dates, format = "%m-%d-%y")
View(df)
Желаемый Результат:
Комментарии:
1. итак, некоторые входные данные-это число от 1900 года, а другие-полная дата, записанная, как в вашем примере?
2. Если бы было согласованное происхождение, то оба
as.Date("2021-05-05") - 44321
иas.Date("1900-01-01") - 1
были бы равны, но они разные, поэтому, похоже, в вопросе есть ошибка.3. Дата 44321 в длинной форме была получена из Excel; см. Комментарий Лайми ниже по этому вопросу
Ответ №1:
Смешение форматов, которые у вас есть, делает ситуацию немного неловкой, но …
library(lubridate)
as_date(
ifelse(
is.na(as.numeric(dates)),
mdy(dates),
dmy("01-Jan-1900") days(as.numeric(dates)-1)
)
)
[1] "2021-05-06" "1900-01-01" "1890-12-25"
что кажется разумным.
Вы уверены в преобразовании 44321
? [Ни 1900, ни 2000 не были високосными годами…]
as.numeric()
Вызовы необходимы, потому dates
что принудительно вводятся в символ из-за последней записи в векторе.
Комментарии:
1. Спасибо, что я раньше не использовал любридат, я попробую его прямо сейчас. Я думаю, что 44321 = 5/5/2021, по крайней мере, из Excel, так что здесь может быть проблема с этим решением?
2. Никогда не полагайтесь на Excel! Из этого следует: «Microsoft Excel с самых ранних версий ошибочно считал 1900 год високосным годом», что объясняет несоответствие.