Как извлечь правильную дату из элемента POSIXct?

Как я могу получить правильную дату из первого столбца в моем коде?

test <- data.frame(posixdate = c("2013-05-01 00:59:00", "2013-05-01 01:59:00", "2013-05-01 02:59:00", "2013-05-01 03:59:00"))
test$posixdate <- as.POSIXct(test$posixdate, format="%Y-%m-%d %H:%M:%S" )
test$date <- as.Date(test$posixdate)

Приведенный выше код приводит к:

  posixdate           date
1 2013-05-01 00:59:00 2013-04-30
2 2013-05-01 01:59:00 2013-04-30
3 2013-05-01 02:59:00 2013-05-01
4 2013-05-01 03:59:00 2013-05-01

Первые две даты неверны. Что я сделал не так?
Если as.Date() — неправильная функция, как я могу получить дату (без часов, минут, секунд) в качестве альтернативы?


person Aki    schedule 23.03.2015    source источник
comment
Вероятно, у вас проблемы с переходом на летнее время. Вам нужно будет указать свой часовой пояс для обоих, например test$posixdate <- as.POSIXct(test$posixdate, tz = "GMT") ; as.Date(test$posixdate, tz = "GMT")   -  person David Arenburg    schedule 23.03.2015
comment
Благодарю вас! Я полагаю, CET автоматически не учитывает летнее время?   -  person Aki    schedule 23.03.2015
comment
as.Date игнорирует. Просто сделай test$posixdate <- as.POSIXct(test$posixdate, tz = "CET") ; as.Date(test$posixdate, tz = "CET")   -  person David Arenburg    schedule 23.03.2015
comment
Идеальный! Большое спасибо. Если бы вы разместили свое решение в качестве ответа, я мог бы принять его.   -  person Aki    schedule 23.03.2015
comment
Это дубликат, и в предыдущих вопросах уже есть ответ, поэтому нет необходимости публиковать другое подобное решение. Хотя я признаю, что новому пользователю R это сложно понять самостоятельно, поэтому я проголосовал за ваш вопрос.   -  person David Arenburg    schedule 23.03.2015
comment
Последний вопрос: использует ли as.POSIXct() локальный (системный) часовой пояс, если не указано иное (tz=), в то время как as.Date() использует GMT, если не указано напрямую?   -  person Aki    schedule 23.03.2015
comment
Значение по умолчанию для as.Date — UTC. Читать ?as.Date   -  person David Arenburg    schedule 23.03.2015


Ответы (2)


проблема в часовом поясе

попробуйте свой часовой пояс (вероятно, не GMT)

test$date2 <- as.Date(test$posixdate, "GMT")

и прочитайте этот пост

person rmuc8    schedule 23.03.2015
comment
Благодарю вас! Хотя я искал подобный пост, но не нашел его. - person Aki; 23.03.2015

Попробуйте с пакетом lubridate. Меня устраивает.

library(lubridate)

as.Date(ymd_hms(test$posixdate))

[1] "2013-05-01" "2013-05-01" "2013-05-01" "2013-05-01"
person Miha Trošt    schedule 23.03.2015