У меня есть данные, похожие на это.Я хотел бы задать единовременную сумму дня (я не уверен, что слово «единовременная сумма» является правильным или нет) и создать новый столбец «дата», чтобы единственная сумма в новом столбце суммировала данные за 3 года в порядке возрастания.
year month day
2011 1 5
2011 2 14
2011 8 21
2012 2 24
2012 3 3
2012 4 4
2012 5 6
2013 2 14
2013 5 17
2013 6 24
Я сделал этот код, но результат был неправильным, и он слишком длинный.Февраль не считается правильно, поскольку в феврале всего 28 дней.Есть ли более короткие пути?
cday <- function(data,syear=2011,smonth=1,sday=1){
year <- data[1]
month <- data[2]
day <- data[3]
cmonth <- c(0,31,28,31,30,31,30,31,31,30,31,30,31)
date <- (year-syear)*365+sum(cmonth[1:month])+day
for(yr in c(syear:year)){
if(yr==year){
if(yr%%4==0&&month>2){date<-date+1}
}else{
if(yr%%4==0){date<-date+1}
}
}
return(date)
}
op10$day.no <- apply(op10[,c("year","month","day")],1,cday)
I expect the result like this:
year month day date
2011 1 5 5
2011 1 14 14
2011 1 21 21
2011 1 24 24
2011 2 3 31
2011 2 4 32
2011 2 6 34
2011 2 14 42
2011 2 17 45
2011 2 24 52
Спасибо за помощь !!