如何在 R 中重复闰年二月最后一天的值?
How to repeate the value of the last day of February for a leap year in R?
我有一个 data.frame
不考虑闰年(即所有年份都是 365 天)。我想在闰年 2 月重复最后一天的值。我下面代码中的 DF
有假数据集,我 故意 删除了 DF_NoLeapday
中的闰日值。我想在 DF_NoLeapday
中添加一个闰日值,方法是重复闰年二月最后一天的值(在我们的示例中为 2004 年 2 月 28 日的值)。我宁愿有一个通用的解决方案来将其应用于多年的数据。
set.seed(55)
DF <- data.frame(date = seq(as.Date("2003-01-01"), to= as.Date("2005-12-31"), by="day"),
A = runif(1096, 0,10),
Z = runif(1096,5,15))
DF_NoLeapday <- DF[!(format(DF$date,"%m") == "02" & format(DF$date, "%d") == "29"), ,drop = FALSE]
我们可以在已经是 Date
class 的 'date' 列上使用 complete
来扩展行以填充缺失的日期
library(dplyr)
library(tidyr)
out <- DF_NoLeapday %>%
complete(date = seq(min(date), max(date), by = '1 day'))
dim(out)
#[1] 1096 3
out %>%
filter(date >= '2004-02-28', date <= '2004-03-01')
# A tibble: 3 x 3
# date A Z
# <date> <dbl> <dbl>
#1 2004-02-28 9.06 9.70
#2 2004-02-29 NA NA
#3 2004-03-01 5.30 7.35
默认情况下,其他列的值填充为NA
,如果我们需要将其更改为不同的值,可以在complete
以内完成fill
如果我们需要以前的值,那么使用fill
out <- out %>%
fill(A, Z)
out %>%
filter(date >= '2004-02-28', date <= '2004-03-01')
# A tibble: 3 x 3
# date A Z
# <date> <dbl> <dbl>
#1 2004-02-28 9.06 9.70
#2 2004-02-29 9.06 9.70
#3 2004-03-01 5.30 7.35
我有一个 data.frame
不考虑闰年(即所有年份都是 365 天)。我想在闰年 2 月重复最后一天的值。我下面代码中的 DF
有假数据集,我 故意 删除了 DF_NoLeapday
中的闰日值。我想在 DF_NoLeapday
中添加一个闰日值,方法是重复闰年二月最后一天的值(在我们的示例中为 2004 年 2 月 28 日的值)。我宁愿有一个通用的解决方案来将其应用于多年的数据。
set.seed(55)
DF <- data.frame(date = seq(as.Date("2003-01-01"), to= as.Date("2005-12-31"), by="day"),
A = runif(1096, 0,10),
Z = runif(1096,5,15))
DF_NoLeapday <- DF[!(format(DF$date,"%m") == "02" & format(DF$date, "%d") == "29"), ,drop = FALSE]
我们可以在已经是 Date
class 的 'date' 列上使用 complete
来扩展行以填充缺失的日期
library(dplyr)
library(tidyr)
out <- DF_NoLeapday %>%
complete(date = seq(min(date), max(date), by = '1 day'))
dim(out)
#[1] 1096 3
out %>%
filter(date >= '2004-02-28', date <= '2004-03-01')
# A tibble: 3 x 3
# date A Z
# <date> <dbl> <dbl>
#1 2004-02-28 9.06 9.70
#2 2004-02-29 NA NA
#3 2004-03-01 5.30 7.35
默认情况下,其他列的值填充为NA
,如果我们需要将其更改为不同的值,可以在complete
以内完成fill
如果我们需要以前的值,那么使用fill
out <- out %>%
fill(A, Z)
out %>%
filter(date >= '2004-02-28', date <= '2004-03-01')
# A tibble: 3 x 3
# date A Z
# <date> <dbl> <dbl>
#1 2004-02-28 9.06 9.70
#2 2004-02-29 9.06 9.70
#3 2004-03-01 5.30 7.35