#r #date
#r #Дата
Вопрос:
Я работаю с лондонским набором данных о преступлениях, который содержит даты в целочисленном формате. Я расплавил их, и теперь они стали factor
s.
Например, "X200801"
. Я хочу преобразовать его в "1/1/2008"
.
Я знаю as.Date
, что он используется для преобразования разных типов в формат даты, но, тем не менее, я немного смущен этим форматом даты, который указан в наборе данных "X200801"
, т.е.
Это моя структура
Комментарии:
1. Просто удалите X с помощью любой функции замены, например
gsub
, и продолжайте. В качестве альтернативы, выясните, каков источник этого X.
Ответ №1:
Используя базу R, мы можем добавить компонент даты, используя paste0
объект convert to date, используя соответствующий format
.
as.Date(paste0("X200801", "01"), format = "X%Y%m%d")
#[1] "2008-01-01"
Ответ №2:
Одна из возможностей заключается в использовании lubridate
ss <- factor("X200801")
library(lubridate)
ymd(paste(sub("X", "", ss), "01", sep = ""))
#[1] "2008-01-01"
Комментарии:
1. Я попытался использовать lubridate, следующий объект замаскирован из package:base : base
2. Я предполагаю, что предупреждение относится к
date
(не базовому) маскированиюlubridate
. Это просто уведомление, из которогоdate
теперь берется функцияlubridate
(вместо базового R).
Ответ №3:
Используя anytime
:
test=as.factor("X200801")
library(anytime)
anydate((gsub("X","",test)))
[1] "2008-01-01"
Как было предложено @akrun, мы можем просто указать формат, который будет использоваться в нашей среде, addFormats
и использовать anydate
для преобразования в дату:
addFormats("X%Y%m")
anydate("X200801")
Комментарии:
1. Спасибо за исправление. (Достигнут лимит голосов). @akrun
Ответ №4:
Его можно компактно изменить с помощью as.yearmon
library(zoo)
as.Date(as.yearmon("X200801", "X%Y%m"))
#[1] "2008-01-01"
Ответ №5:
Вы можете использовать parse_datetime из пакета readr:
testdate <- factor("X200801")
parse_datetime(as.character(testdate), format = 'X%Y%M')
Я бы не рекомендовал использовать MM / DD / YYY в R. Предпочтительнее сохранять данные в формате ISO 8601.