Преобразование наборов календарных дат в юлианские дни во фрейме данных

Я новичок в R и пытаюсь преобразовать наборы календарных дат в наборы юлианских дат во фрейме данных с помощью R. Я знаю, что есть ответы на похожие вопросы, но я не могу получить то, что хочу.

df <- data.frame(Date = c('2010-06-20','2005-10-19','2000-05-01','2003-04-04','2010-11-20','2009-09-14'), No = c(1, 4, 6, 11, 7, 9))

df$ jDate <-  as.POSIXct(as.numeric(df$Date), origin = '1970-01-01')

дает мне

df

Дата № cДата

1 2010-06-20 1 1969-12-31 19:00:05

2 2005-10-19 4 1969-12-31 19:00:03

3 2000-05-01 6 1969-12-31 19:00:01

4 2003-04-04 11 1969-12-31 19:00:02

5 2010-11-20 7 1969-12-31 19:00:06

6 2009-09-14 9 1969-12-31 19:00:04

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

Спасибо за помощь.


person owl    schedule 13.06.2017    source источник
comment
Вы можете найти функцию julian полезной.   -  person aosmith    schedule 13.06.2017
comment
Я пробовал tojulian и julian в какой-то момент, когда пытался понять это, но на этот раз это действительно сработало! Спасибо, что подняли это!   -  person owl    schedule 13.06.2017
comment
Я очень признателен, если кто-нибудь может сказать мне, как правильно опубликовать вывод...   -  person owl    schedule 13.06.2017
comment
Связанный пост stackoverflow.com/questions/20080241/   -  person akrun    schedule 14.06.2017


Ответы (2)


Ты можешь сделать

df$Date <- as.Date(df$Date)

чтобы получить дату, а затем

df$jDate <- format(df$Date, "%j")

чтобы получить юлианские дни или

df$jDateYr <- format(df$Date, "%Y-%j")

чтобы добавить год (если хотите). Это возвращает

df
        Date No jDate  jDateYr
1 2010-06-20  1   171 2010-171
2 2005-10-19  4   292 2005-292
3 2000-05-01  6   122 2000-122
4 2003-04-04 11   094 2003-094
5 2010-11-20  7   324 2010-324
6 2009-09-14  9   257 2009-257

Чтобы узнать больше о возможных форматах даты и времени, см. ?strptime.

person lmo    schedule 13.06.2017
comment
Спасибо за ваш быстрый ответ! Я пытаюсь получить юлианские дни с 1970-01-01, чтобы можно было рассчитать дни между разными годами (т.е. не должно быть ограничено от 0 до 365). Есть ли способ сделать это? - person owl; 13.06.2017

Основываясь на комментариях aosmith, я сделал это и получил то, что хотел.

> df$jDate <- julian(as.Date(df$Date), origin = as.Date('1970-01-01'))

df

Дата № jDate

1 2010-06-20 1 14780

2 2005-10-19 4 13075

3 2000-05-01 6 11078

4 2003-04-04 11 12146

5 2010-11-20 7 14933

6 2009-09-14 9 14501

person owl    schedule 13.06.2017