Как преобразовать строковый коэффициент в дату?

#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.