Преобразовать отдельные столбцы «год» и «день» в один столбец «Дата» с помощью lubridate?

У меня есть один столбец для «года» и один столбец для «дня» (юлианский день), и я хочу использовать эти столбцы для создания «даты» (2002-12-03 или любой формат в порядке). Я нашел много lubridate литературы по разделению свиданий, но я ищу, как их соединить.

Как бы просто это ни звучало:

year    day    
2008    1
2008    2
2008    3
2008    4

to

year    day    date
2008    1    2008-1-1
etc.

person Nazer    schedule 12.06.2014    source источник
comment
Что бы вы сделали в месяц?   -  person stanekam    schedule 12.06.2014
comment
@iShouldUseAName Сейчас юлианский день, значит, 13: 65.   -  person MrFlick    schedule 12.06.2014
comment
Столбец дня - это юлианские дни, поэтому он занимает 1–365.   -  person Nazer    schedule 12.06.2014


Ответы (1)


Вы можете использовать базовые даты вместо лубридата, если хотите

Если это ваш образец данных

dd<-data.frame(
    year = rep(2008,4), 
    day = 1:4
)

Тогда ты можешь бежать

years <- unique(dd$year)
yearstarts <- setNames(as.Date(paste0(years, "-01-01")), years)
newdates <- yearstarts[as.character(dd$year)] + dd$day - 1

Что производит

cbind(dd, newdates)

#   year day   newdates
# 1 2008   1 2008-01-01
# 2 2008   2 2008-01-02
# 3 2008   3 2008-01-03
# 4 2008   4 2008-01-04

Это работает, потому что базовый класс Date хранит количество дней с момента определенного контрольного значения. Таким образом, когда вы добавляете 1, вы добавляете один день к текущей дате. Здесь я предположил, что у вас может быть несколько лет, чтобы я правильно рассчитал значение даты для первого дня каждого года.

person MrFlick    schedule 12.06.2014
comment
это отлично работает и, похоже, охватывает и високосные годы. Я все еще так запутался, думая о том, как работает класс Date, что пытаюсь перейти к lubridate. Я боялся задать такой вопрос без тега lubridate, потому что знаю, что ответ, вероятно, уже есть, но с множеством вещей, которые нужно разобрать, которые я действительно не понимаю. - person Nazer; 12.06.2014