Когда вы конвертируете десятичную дату в юлианский с% j strptime, как вы указываете год? - PullRequest
0 голосов
/ 06 ноября 2018

Этот код переводит юлианский год в значение по умолчанию для текущего года, но как я могу указать, что год должен быть 2011?

fractionalDayofYear <-seq(300,302,0.1)
julianDate<-  format(strptime((fractionalDayofYear), format='%j'),'%Y-%m-%d')

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Это зависит от того, что вы используете и как вы собираетесь его использовать.

Оба объекта Date и POSIXt относятся к "1970-01-01 00:00:00 -00: 00". Date «целочисленное» значение - это день, а POSIXt «целое» - одна секунда.

Если вы используете Date s, то, чтобы сделать это несколько конвертируемым, вы должны добавить «int» предыдущего 31 декабря (поскольку 1 января - юлианский день 1). На сегодня это было бы

as.Date("2017-12-31")
# [1] "2017-12-31"
as.numeric(as.Date("2017-12-31"))
# [1] 17531

так 17531 + fractionalDayofYear.

Если вы используете POSIXt, то вам нужно будет сделать две вещи: найти числовой компонент для времени и преобразовать ваш "integer-means-day" в секунды:

as.POSIXct("2017-12-31")
# [1] "2017-12-31 PST"
as.numeric(as.POSIXct("2017-12-31"))
# [1] 1514707200
(3600*24*fractionalDayofYear) + 1514707200

Обратите внимание, что это может неправильно обрабатывать переход на летнее время ...

0 голосов
/ 06 ноября 2018

Используйте as.difftime для более точного добавления дней + дробных дней:

as.POSIXct("2010-12-31", tz="UTC") + as.difftime(fractionalDayofYear, units="days")
#[1] "2011-10-27 00:00:00 UTC" "2011-10-27 02:24:00 UTC" "2011-10-27 04:48:00 UTC" ...

Если вам не нужны неполные дни, просто вставьте туда «2011»:

as.Date(paste("2011",fractionalDayofYear), format="%Y %j")
# [1] "2011-10-27" "2011-10-27" "2011-10-27" "2011-10-27" "2011-10-27" ...
...