Конвертировать символ на сегодняшний день в R

StackOverflow https://stackoverflow.com/questions/4310326

  •  29-09-2019
  •  | 
  •  

Вопрос

Я относительно новый до 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")

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top