Конвертировать символ на сегодняшний день в R
Вопрос
Я относительно новый до r, но это первый раз, когда мне пришлось иметь дело с преобразованиями даты. Я читаю в моих данных из CSV (используя read.table ()), но я замкнул данные, чтобы выделить мою проблему. При чтении в R, поле даты является символом.
Проще говоря, большинство моих дат принуждены правильно, за исключением нескольких случаев. Пример ниже, надеюсь, покажет вам, что происходит.
# my attempt to coerce the date -- uses the stringr package
prods.all$Date2 <- as.Date(str_sub(prods.all$Date, 1,
str_locate(prods.all$Date, " ")[1]-1),
"%m/%d/%Y")
# grab two rows to highlight my issue
temp <- prods.all[c(1925:1926), c(1,8)]
> temp
Date Date2
1925 10/9/2009 0:00:00 2009-10-09
1926 10/15/2009 0:00:00 0200-10-15
Как видите, год некоторых дат неточны. Кажется, что рисунок происходит, когда день двойной цифры.
Я просмотрел пару книг и попытался Google лучше, но, похоже, все предполагает, что мои данные не отформатированы правильно при вводе.
Учитывая, насколько мощный R, я полагаю, что есть очень простой способ заставить мою колонку быть действительными датами и что я упускаю на очень очевидное решение.
Любая помощь, которую вы можете предоставить, будет высоко оценена.
Решение
Вы можете переоценить вещи, есть ли какая -то причина, по которой вам нужна пакет StringR?
df <- data.frame(Date = c("10/9/2009 0:00:00", "10/15/2009 0:00:00"))
as.Date(df$Date, "%m/%d/%Y %H:%M:%S")
[1] "2009-10-09" "2009-10-15"
В более общем плане, и если вам также нужен компонент времени, используйте Strpt -Time:
strptime(df$Date, "%m/%d/%Y %H:%M:%S")
Я предполагаю, что ваши фактические данные могут взглянуть на частичные результаты, которые вы даете.
Другие советы
Самый простой способ - использовать Lubridate:
library(lubridate)
prods.all$Date2 <- mdy(prods.all$Date2)
Эта функция автоматически возвращает объекты класса POSIXct
и будет работать с факторами или персонажами.
library(lubridate)
Если ваш формат даты такой же, как этот '04/24/2017 05: 35: 00'then изменить его, как нижеprods.all$Date2<-gsub("/","-",prods.all$Date2)
Затем измените формат датыparse_date_time(prods.all$Date2, orders="mdy hms")