2014-12-09 3 views
3

У меня возникают проблемы с извлечением правильных значений символа из объекта PATIXct datetime с использованием strftime(). Dput() мои данные образца ниже:POSIXct для символа через strftime() приводит к неправильному результату

dput(df1) 
structure(list(FlowDate3 = structure(c(1388534400, 1388534400, 
1388534400, 1388534400, 1388534400, 1388534400, 1388534400, 1388534400, 
1388534400, 1388534400), class = c("POSIXct", "POSIXt"), tzone = "UTC"), 
    FlowDate4 = c("2013-12-31", "2013-12-31", "2013-12-31", "2013-12-31", 
    "2013-12-31", "2013-12-31", "2013-12-31", "2013-12-31", "2013-12-31", 
    "2013-12-31")), .Names = c("FlowDate3", "FlowDate4"), row.names = c(NA, 
10L), class = "data.frame") 

выглядит так:

> df1 
    FlowDate3 FlowDate4 
1 2014-01-01 2013-12-31 
2 2014-01-01 2013-12-31 
3 2014-01-01 2013-12-31 
4 2014-01-01 2013-12-31 
5 2014-01-01 2013-12-31 
6 2014-01-01 2013-12-31 
7 2014-01-01 2013-12-31 
8 2014-01-01 2013-12-31 
9 2014-01-01 2013-12-31 
10 2014-01-01 2013-12-31 

> str(df1) 
'data.frame': 10 obs. of 2 variables: 
$ FlowDate3: POSIXct, format: "2014-01-01" "2014-01-01" "2014-01-01" ... 
$ FlowDate4: chr "2013-12-31" "2013-12-31" "2013-12-31" "2013-12-31" ... 

Для создания FlowDate4 я сделал следующее:

> strftime(df1$FlowDate3, "%Y-%m-%d") 
[1] "2013-12-31" "2013-12-31" "2013-12-31" "2013-12-31" "2013-12-31" "2013-12-31" 
[7] "2013-12-31" "2013-12-31" "2013-12-31" "2013-12-31" 

, который, как вы можете видеть приводит к неправильным символьным строкам для даты в FlowDate3 ... год, месяц и дата отключены. Я бегал по многочисленным кругам, пытаясь понять, почему и я нахожусь в полной потере. strftime() не ведет себя так, как я пережил в прошлом. Любая помощь приветствуется.

ответ

1

Необходимо установить часовой пояс в своем обращении к strptime. Атрибут tzone вашего объекта POSIXct не используется.

strftime(df1$FlowDate3, format="%Y-%m-%d", tz=attr(df1$FlowDate3, "tzone")) 
+0

Это всегда было так, или это новое требование для недавнего распределения R? Я не помню, чтобы когда-либо это делалось ... – stokeinfo

+0

TimeZones ВСЕГДА были в замешательстве. –

+0

@stokeinfo: вам, возможно, не пришлось это делать раньше, потому что у ваших данных не было атрибута 'tzone' или он существовал, но был установлен в ваш часовой пояс. Я не знаю, изменилось ли оно в последнее время в R. Вам нужно будет посмотреть файл NEWS и/или историю svn. –