如何解决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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。