R 如何使用完整函数创建月末日期序列?
这是我的玩具数据集:R 如何使用完整函数创建月末日期序列?,r,date,tidyr,xts,zoo,R,Date,Tidyr,Xts,Zoo,这是我的玩具数据集: df <- tibble::tribble( ~date, ~value, "2007-01-31", 25, "2007-05-31", 31, "2007-12-31", 26 ) 但是,我没有得到正确的月末日期 date value <date> <dbl> 1 2007-01-31 25 2 2007-03-03 NA 3
df <- tibble::tribble(
~date, ~value,
"2007-01-31", 25,
"2007-05-31", 31,
"2007-12-31", 26
)
但是,我没有得到正确的月末日期
date value
<date> <dbl>
1 2007-01-31 25
2 2007-03-03 NA
3 2007-03-31 NA
4 2007-05-01 NA
5 2007-05-31 31
6 2007-07-01 NA
7 2007-07-31 NA
8 2007-08-31 NA
9 2007-10-01 NA
10 2007-10-31 NA
11 2007-12-01 NA
12 2007-12-31 26
我错过了什么?我可以使用任何其他软件包中的其他函数。不需要完整的函数,您可以在base R中执行此操作
由于每个月的最后一天不同,我们可以创建一个月开始日期序列,并从中减去1天
seq(as.Date("2007-02-01"), as.Date("2008-01-01"), by="month") - 1
#[1] "2007-01-31" "2007-02-28" "2007-03-31" "2007-04-30" "2007-05-31" "2007-06-30"
# "2007-07-31" "2007-08-31" "2007-09-30" "2007-10-31" "2007-11-30" "2007-12-31"
在更新的dataframe中使用相同的逻辑,我们可以:
library(dplyr)
df %>%
mutate(date = as.Date(date)) %>%
tidyr::complete(date = seq(min(date) + 1, max(date) + 1, by="month") - 1)
# date value
# <date> <dbl>
# 1 2007-01-31 25
# 2 2007-02-28 NA
# 3 2007-03-31 NA
# 4 2007-04-30 NA
# 5 2007-05-31 31
# 6 2007-06-30 NA
# 7 2007-07-31 NA
# 8 2007-08-31 NA
# 9 2007-09-30 NA
#10 2007-10-31 NA
#11 2007-11-30 NA
#12 2007-12-31 26
对不起,只是把问题稍微改了一下。我现在如何在更新的数据框中修复日期序列?太棒了!谢谢
library(dplyr)
df %>%
mutate(date = as.Date(date)) %>%
tidyr::complete(date = seq(min(date) + 1, max(date) + 1, by="month") - 1)
# date value
# <date> <dbl>
# 1 2007-01-31 25
# 2 2007-02-28 NA
# 3 2007-03-31 NA
# 4 2007-04-30 NA
# 5 2007-05-31 31
# 6 2007-06-30 NA
# 7 2007-07-31 NA
# 8 2007-08-31 NA
# 9 2007-09-30 NA
#10 2007-10-31 NA
#11 2007-11-30 NA
#12 2007-12-31 26