2016-11-17 2 views
0

У меня есть дата, которую мне нужно преобразовать в юлианские дни. Это данные, у меня естьКонвертировать дату без года в юлианский день (количество дней с начала года)

date <- c("21-Jul", "14-Jul", "08-Jul", "08-Jul","16-Jul") 
class(date) 

[1] "character" 

Я хочу, чтобы преобразовать date в юлианские дни. Таким образом, для указанных дат, дни Джулиана будут:

date 
202,195,189,189,197 

Я нашел функцию as.POSIXlt, которая преобразует дату в Julian день. Напр.

tmp <- as.POSIXlt("16Jun10", format = "%d%b%y") 
tmp$yday 
# [1] 166 

Но для этого нужна дата в определенном порядке, включая год, который у меня нет. Есть ли способ конвертировать мои даты, которые являются персонажами, и у меня нет года в Джулиане?

Кроме того, этот год не является високосным годом.

Julian дней означают день года, так 1 января составляет 1, 2 января в 2 и так далее ....

+0

Юлийские дни означают день года, так что 1 января 1, 2 января - 2 и т. Д. – user53020

+0

О да. спасибо, что указали это. – user53020

+1

Если вы не знаете год, то вы не знаете, год ли високосный год или нет, поэтому юлианский день не определяется (по крайней мере после февраля). –

ответ

3

база R имеет функцию julian, которая может производить то, что вы ищете вместе с paste0 и as.Date.

julian(as.Date(paste0("1970-", date), format="%Y-%d-%b")) 
[1] 201 194 188 188 196 
attr(,"origin") 
[1] "1970-01-01" 

Обратите внимание, что это считается как количество дней с 1 января 1970 года (начинается с 0), так что вы можете добавить 1, чтобы получить желаемый результат.

julian(as.Date(paste0("1970-", date), format="%Y-%d-%b")) + 1 
[1] 202 195 189 189 197 

я вручную проверил, что 1970 не високосный год:

seq(as.Date("1970-02-25"), as.Date("1970-03-02"), by="day") 
[1] "1970-02-25" "1970-02-26" "1970-02-27" "1970-02-28" "1970-03-01" "1970-03-02" 

Для дальнейшего использования, можно также установить отправную точку самостоятельно, используя происхождения аргумента as.Date:

julian(as.Date(paste0("1980-", date), format="%Y-%d-%b"), origin=as.Date("1980-01-01")) 
[1] 202 195 189 189 197 
attr(,"origin") 
[1] "1980-01-01" 

Как должно быть ясно, источник может быть установлен на любую дату, которую вы хотите, чтобы это можно было использовать для расчета количества дней, следующих за (или предшествующих) любой дате.

Смежные вопросы