如何在特定日期检查变量+;/-2天在R

如何在特定日期检查变量+;/-2天在R,r,R,我真的希望有人能帮我解决这个问题,因为我已经挣扎了一段时间。我的数据如下所示: ID DATE VAR1 VAR2 01 2018-07-27 0 0 01 2018-07-28 0 0 01 2018-07-29 0 1 01 2018-07-30 0 1 01 2018-07-31 0 1 01 2018-08-0

我真的希望有人能帮我解决这个问题,因为我已经挣扎了一段时间。我的数据如下所示:

ID DATE        VAR1       VAR2  
01 2018-07-27      0         0  
01 2018-07-28      0         0  
01 2018-07-29      0         1  
01 2018-07-30      0         1  
01 2018-07-31      0         1  
01 2018-08-01      0         0
02 2018-09-30      1         0  
02 2018-10-01      0         0  
02 2018-10-02      0         1  
02 2018-10-03      1         1  
02 2018-10-04      1         1  
02 2018-10-05      0         1  
02 2018-10-06      0         0  
02 2018-10-07      0         0  
02 2018-10-08      0         0  
02 2018-10-10      0         0  
02 2018-10-12      0         0  
02 2018-10-13      0         0 
02 2018-10-14      0         0  
02 2018-10-15      1         0  
02 2018-10-18      1         0  
02 2018-10-19      0         0  
02 2018-10-20      0         0 
02 2018-10-26      0         0  
02 2018-10-28      0         0  
02 2018-11-02      0         1 
ID PRESENT
01 0  
02 1   
我想知道每个ID在VAR 2出现的第一天+/-2天时VAR1是否出现。我想将答案存储在一个新的数据框中,如下所示:

ID DATE        VAR1       VAR2  
01 2018-07-27      0         0  
01 2018-07-28      0         0  
01 2018-07-29      0         1  
01 2018-07-30      0         1  
01 2018-07-31      0         1  
01 2018-08-01      0         0
02 2018-09-30      1         0  
02 2018-10-01      0         0  
02 2018-10-02      0         1  
02 2018-10-03      1         1  
02 2018-10-04      1         1  
02 2018-10-05      0         1  
02 2018-10-06      0         0  
02 2018-10-07      0         0  
02 2018-10-08      0         0  
02 2018-10-10      0         0  
02 2018-10-12      0         0  
02 2018-10-13      0         0 
02 2018-10-14      0         0  
02 2018-10-15      1         0  
02 2018-10-18      1         0  
02 2018-10-19      0         0  
02 2018-10-20      0         0 
02 2018-10-26      0         0  
02 2018-10-28      0         0  
02 2018-11-02      0         1 
ID PRESENT
01 0  
02 1   
有人知道怎么做吗?VAR2是月经周期。对于一些身份证,我有多次月经的数据。如果VAR1在其中一次月经的第一天+/-2天出现,我希望它们呈阳性


提前谢谢

一种方法,但应该有更好的方法:

library(dplyr)

df %>%
  group_by(ID) %>%
  mutate(
    DATE = as.Date(DATE),
    VAR2 = ifelse(VAR2 == 1 & lag(VAR2) == 1, 0, VAR2),
    PRESENT = sapply(DATE,
                     function(x) any(VAR1[between(DATE, x - 2, x + 2)] == 1)) & VAR2 == 1
  ) %>% 
  summarise(PRESENT = +any(PRESENT))
输出:

# A tibble: 2 x 2
     ID PRESENT
  <int>   <int>
1     1       0
2     2       1
#一个tible:2x2
我在场
1     1       0
2     2       1
使用的数据:

df <- structure(list(ID = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L
), DATE = structure(1:26, .Label = c("2018-07-27", "2018-07-28", 
"2018-07-29", "2018-07-30", "2018-07-31", "2018-08-01", "2018-09-30", 
"2018-10-01", "2018-10-02", "2018-10-03", "2018-10-04", "2018-10-05", 
"2018-10-06", "2018-10-07", "2018-10-08", "2018-10-10", "2018-10-12", 
"2018-10-13", "2018-10-14", "2018-10-15", "2018-10-18", "2018-10-19", 
"2018-10-20", "2018-10-26", "2018-10-28", "2018-11-02"), class = "factor"), 
    VAR1 = c(0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L), 
    VAR2 = c(0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L)), class = "data.frame", row.names = c(NA, 
-26L))

df对于您向我们展示的所有六行,答案似乎都是否定的。您是否可以包括其他具有匹配项的示例数据,以及预期的输出?我编辑了我的问题。谢谢你的建议。谢谢你分享你的想法!不幸的是,这会产生以下错误:mutate_impl(.data,dots)中的错误:求值错误:需要单个值:[extent=114]…不确定。1) 你能试试我的最新编辑吗?2) 你有重复的日期吗?3) 你的数据似乎更复杂;你能分享更多吗?你可以通过
dput(yourdf)
是的,这可能是因为我的数据集中有多次月经。在显示的数据中,我只显示了ID 2的一个周期,但有些患者的数据超过了一个周期。我的数据集太大,无法使用dput,但我将为我的问题添加更多数据。我现在为ID 2添加了更多数据。现在是第二次月经(VAR2)。在这次月经期间,VAR1缺失。我仍然希望ID2是阳性的,因为VAR1出现在VAR2的一集中。你明白我的问题吗?很奇怪。代码也不会在dput上运行。我更新了dplyr包R和Rstudio,但它仍然无法工作。你还有别的想法吗?