Я пытаюсь исключить наблюдения, если они не находятся в определенном диапазоне дат из соседнего столбца. - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть набор данных, который имеет два столбца даты.Первая - это дата проведения теста (Дата 1).Второй столбец - это дата проведения дополнительного теста (Дата 2).Я хочу исключить наблюдения, если Дата 2 не в пределах плюс или минус 3 дня от даты 1.

ID <- c(1,2,3,4)
Date1 <- c("2016-07-01", "2016-07-02", "2016-07-03","2017-08-01")
Date2 <- c("2016-07-02", "2016-07-03", "2016-07-04","2017-08-15")

df = data.frame(ID, Date1, Date2)




ID       Date1                Date2    
1   2016-07-01           2016-07-02     
2   2016-07-02           2016-07-03     
3   2016-07-03           2016-07-04     
4   2017-08-01           2017-08-15

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Делать с abs

df[abs(as.Date(df$Date1)-as.Date(df$Date2))<3,]
  ID      Date1      Date2
1  1 2016-07-01 2016-07-02
2  2 2016-07-02 2016-07-03
3  3 2016-07-03 2016-07-04
0 голосов
/ 19 февраля 2019

Мы можем сделать что-то вроде этого

library(lubridate)
library(dplyr)
df %>%
    mutate_at(vars(starts_with("Date")), ymd) %>%
    filter(Date2 <= Date1 %m+% days(3) & Date2 >= Date1 %m-% days(3))
#  ID      Date1      Date2
#1  1 2016-07-01 2016-07-02
#2  2 2016-07-02 2016-07-03
#3  3 2016-07-03 2016-07-04
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...