R:通过计算前一天的均值来删除leap日

问题描述

我有一个时间序列,其中以下是一个子集:

structure(list(Date = structure(c(16851,16852,16853,16854,16855,16856,16857,16858,16859,16860),class = "Date"),BAL = c(4.38212529123126,6.2362101768993,7.58042025123348,1.28668112319138,0.394057913904365,0.223231297328036,-0.677870337868538,-0.803250821089761,-0.812567723037268,-0.586754184659877)),row.names = c(NA,-10L),class = c("tbl_df","tbl","data.frame"))

为了使每年的天数相同,我需要删除2月29日。我可以通过以下方式轻松地做到这一点:

library(lubridate,dplyr)
filter(x,!(month(Date) == 2 & day(Date) == 29))

但是那样的话,我将失去当天的准确信息。我的想法是用2月28日和2月29日的平均值代替2月28日的测量值,但是我不知道该怎么做。请注意,我原来的时间序列要长得多,并且需要数年的测量时间。

解决方法

也许您可以尝试下面的基本R代码

idx <- with(df,which(format(Date,"%m-%d")=="02-29"))
within(df,BAL <- replace(BAL,idx-1,mean(BAL[idx+(-1:0)])))[-idx,]

给出

  Date          BAL
  <date>      <dbl>
1 2016-02-20  4.38
2 2016-02-21  6.24
3 2016-02-22  7.58
4 2016-02-23  1.29
5 2016-02-24  0.394
6 2016-02-25  0.223
7 2016-02-26 -0.678
8 2016-02-27 -0.803
9 2016-02-28 -0.700

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...