从 r 中的条件开始,将 7 天添加到现有日期

Add 7 days to the existing date starting from a condition in r

我有一个这种格式的数据框:

df1:
Date         Week    Visitors
2016-09-25   40      100
2016-10-02   41      200
.
.
2016-12-25   52      600
2017-01-08   01      500
2017-01-15   02      1000
2017-01-22   03      2000
.
.

我想从 Date 开始减去 7 天,当 Week ==1 和 Day(2017-01-08) >=7 用于其余数据。

我的数据框是:

df1:
Date         Week    Visitors
2016-09-25   40      100
2016-10-02   41      200
.
.
2016-12-25   01      600
2017-01-01   01      500
2017-01-08   02      1000
2017-01-15   03      2000
.
.

谁能给我指出正确的方向?

我觉得你问的和我想的大不一样,所以我编辑了我的答案。我想你想要的是每年的支票,这样如果那一年的 "Week == 1" 在 07 年 1 月之前,那么假设第一周是 "missing",然后通过移动所有日期向后 7 天。以下是如何实现的。

首先,我们将创建一个列来指定年份:

library( data.table )
setDT( df1 )
df1[ , Year := format( Date, "%Y" )
     ]

然后,我们将定义一个函数来检查缺少的第一周,并在适当的情况下移动日期:

checkAndMove <- function( d, w ) {
    month.day <- as.integer( format( d, "%m%d" ) )
    if( month.day[ w == 1 ] > 0106 ) {
        d <- d - 7
    }
    return( d )
}

然后,我们可以将此函数应用于您选择的某一年:

df1[ Year == 2017, Date := checkAndMove( d = Date, w = Week ) ]

或者,我们可以让 R 运行 一次检查所有年份,仅在函数认为合适时才应用更改:

df1[ , Date := checkAndMove( d = Date, w = Week ), by = Year ]

注意:我没有测试这段代码,因为我没有太多数据可以使用。如果您能提供更多数据,我很乐意 运行 进行测试以确保它的行为符合预期。