2015-07-16 1 views
0

Я работаю с месячными данными о климате, и хочу получить даты, которые данные покрывают в форме yyyy-mm, таких как 2015-01, 2015-02 и т. Д. Атрибут набора данных говорит «часы с 1800-1 -1 00:00:00 '. Данные фактически охватывают период с 1948-2015 гг. При ежемесячном разрешении.Как получить месяцы в R, когда мои данные имеют атрибут «часы с тех пор»?

Я попытался следующие, но и не дает мне то, что я ожидал:

months<-as.POSIXlt(time_slp, origin='1800-1-1 00:00:00') 

months<-as.Date(time_slp, origin ="1800-1-1 00:00:00") 

Образец time_slp:

time_slp <- c(1569072, 1569816, 1570488, 1571232, 1571952, 1572696, 1573416, 1574160, 1574904, 1575624) 
+1

могли бы вы предоставить образец 'time_slp'? Возможно, 'as.POSIXct (" 1800-01-01 00:00:00 ") + as.difftime (time_slp, units =" hours ")' может помочь – nicola

+0

time_slp [1:10] [1] 1569072 1569816 1570488 1571232 1571952 1572696 1573416 [8] 1574160 1574904 1575624 –

+1

Включите образец в вопрос, чтобы его можно было увидеть. См. Мой отредактированный комментарий выше. – nicola

ответ

2

Вы можете попробовать:

as.POSIXct("1800-01-01 00:00:00")+as.difftime(time_slp, units="hours") 

Знать месяц каждой даты, просто используйте months:

months(as.POSIXct("1800-01-01 00:00:00")+as.difftime(time_slp, units="hours")) 

Чтобы иметь его в формате, который вы просили в комментариях, попробуйте strftime (скажем x является объект, полученный из моей первой линии):

strftime(x,format="%Y-%m") 
+0

Спасибо Никола. Есть ли способ получить дату в форме yyyy-mm, например, 1990-01, 1990-02, ..., 2015-01, 2015-06? –

+0

Несомненно. См. Мое редактирование выше. – nicola

+0

Огромное спасибо. Фактически, в наборе данных данные за каждый месяц помещаются в конце предыдущего месяца. Данные начинаются в январе -1948 году, но когда я использую strftime, он отпускает дни, даже если это конец месяца. Есть ли способ справиться с этим? time_slp [1: 5] [1] "1947-12-31 23:56:02 EST" "1948-01-31 23:56:02 EST" [3] "1948-02-29 23:56: 02 EST "" 1948-03-31 23:56:02 EST " [5]" 1948-05-01 00:56:02 EDT " –