首页 > 解决方案 > 在 r 中的数据框中继续日期

问题描述

假设我有以下内容data.frame

Dates<-seq(as.Date('2017/01/01'), by = 'day', length.out = 365)
A <- data.frame(date=(Dates), month=month(Dates), week=week(Dates))
library(dplyr)
B <- A %>% dplyr::mutate(day = lubridate::wday(date, label = TRUE))
B[350:365,]

          date month week day
350 2017-12-16    12   50 Sat
351 2017-12-17    12   51 Sun
352 2017-12-18    12   51 Mon
353 2017-12-19    12   51 Tue
354 2017-12-20    12   51 Wed
355 2017-12-21    12   51 Thu
356 2017-12-22    12   51 Fri
357 2017-12-23    12   51 Sat
358 2017-12-24    12   52 Sun
359 2017-12-25    12   52 Mon
360 2017-12-26    12   52 Tue
361 2017-12-27    12   52 Wed
362 2017-12-28    12   52 Thu
363 2017-12-29    12   52 Fri
364 2017-12-30    12   52 Sat
365 2017-12-31    12   53 Sun

我需要在结束日期之后添加另外十个日期,即从 2018-01-01 到 2018-01-10。一周的顺序应该是连续的。例如:

           date month week day
 365 2017-12-31    12   53 Sun
 366 2018-01-01     1   53 Mon
 367 2018-01-02     1   53 Tue
 368 2018-01-03     1   53 Wed
 369 2018-01-04     1   53 Thu
 370 2018-01-05     1   53 Fri
 371 2018-01-06     1   53 Sat
 372 2018-01-07     1   54 Sun
 373 2018-01-08     1   54 Mon
 374 2018-01-09     1   54 Tue
 375 2018-01-10     1   54 Wed

标签: rdatedataframe

解决方案


对@antoniosk 代码的小调整,刚刚从过去的数据框中添加了最大周数,并根据需要获得了连续的周数。

library(dplyr)
library(lubridate)

Dates<-seq(as.Date('2017/01/01'), by = 'day', length.out = 365)
A <- data.frame(date=(Dates), month=month(Dates), week=week(Dates))

B <- A %>% dplyr::mutate(day = lubridate::wday(date, label = TRUE))
B[350:365,]


c<- B %>%   rbind(                                                                       # bind rows with the following dataset
data.frame(date = seq(max(B$date)+1, by = 'day', length.out = 10)) %>% # get 10 extra sequential dates after the last date in B
mutate(month = month(date), week = (as.numeric(strftime(date, format = "%U")) +max(A$week)),day = wday(date, label = TRUE)) ) %>% tbl_df()       

推荐阅读