Преобразование chr "00: 00: 00" в date-time " 00: 00: 00"
Мой вопрос исходит из этого вопроса. Вопрос имел следующую символьную строку.
x <- "2007-02-01 00:00:00"
y <- "02/01/2007 00:06:10"
Если вы попытаетесь преобразовать эту строку в объект класса date, произойдет нечто забавное.
Это пример из ответа @nrusell.
as.POSIXct(x,tz=Sys.timezone())
[1] "2007-02-01 EST"
as.POSIXct(y,format="%m/%d/%Y %H:%M:%S",tz=Sys.timezone())
[1] "2007-02-01 00:06:10 EST"
Как вы видите, 00:00:00
исчезает из первого примера. @Richard Scriven оставил следующий пример в нашем обсуждении, используя lubridate
.
dt <- as.POSIXct("2007-02-01 00:00:00")
hour(dt) <- hour(dt)+1
dt
[1] "2007-02-01 01:00:00 EST"
hour(dt) <- hour(dt)-1
dt
[1] "2007-02-01 EST"
Снова исчезает 00:00:00
. Почему R избегает держать 00:00:00
в объект класса даты после преобразования? Как мы можем сохранить 00:00:00
?
1 ответ:
Это просто
??strftime
, особенно параметр format:Одна из идей состоит в том, чтобы переопределить метод S3Символьная строка. По умолчанию используется "%Y - %m - %d %H:%M:%S", Если есть компонент имеет компонент времени, который не является полуночью, и "%Y - %m - %d" в противном случае
print.POSIXct <- function(x,...)print(format(x,"%Y-%m-%d %H:%M:%S"))
Теперь для вашего примера, если вы печатаете свою дату x(с полуночью часть) вы получаете:
x <- "2007-02-01 00:00:00" x <- as.POSIXct(x,tz=Sys.timezone()) x [1] "2007-02-01 00:00:00"