Фильтровать даты по определенному значению столбца - PullRequest
1 голос
/ 05 октября 2019

Я пытаюсь отфильтровать даты по определенному значению смещения из кадра данных календарных дней.

Календарные дни данных:

calendardays <- as.data.frame(as.Date(seq(as.Date("2019-01-03"), as.Date("2022-12-31"), by="days")))
colnames(calendardays)<- c("Date")

DF2:

     LC    Custcode       Date      offsetdate
    RM11    IN007543    2019-10-03  2
    WK15    IN007543    2019-10-03  3

в DF2, для каждой строки есть смещение даты, что означает, что я хочу найти х нет. дат от даты, которая упоминается в DF2, соответствующей этому коду CustCode LC из календарных дней данных.

Вывод:

     LC    Custcode       Date      
    RM11    IN007543    2019-10-03
    RM11    IN007543    2019-10-04
    WK15    IN007543    2019-10-03
    WK15    IN007543    2019-10-04
    WK15    IN007543    2019-10-05  

Ответы [ 2 ]

3 голосов
/ 05 октября 2019

Расширить DF2 с помощью ix, а затем увеличить поле Дата. Пакеты не используются.

ix <- rep(1:nrow(DF2), DF2$offsetdate) # 1,1,2,2,2
DF2rep <- transform(DF2[ix, ], Date = Date + sequence(DF2$offsetdate) - 1)[-4]

Это уже дает выходные данные, показанные в вопросе, но если вам нужно проверить, появляются ли даты и в календарных днях, в DF2rep сохранятся только те даты, которые также есть в календарных днях.

DF2rep[DF2rep$Date %in% calendardays$Date, ]

Примечание

DF2 в воспроизводимой форме предполагается равным:

Lines <- "     LC    Custcode       Date      offsetdate
    RM11    IN007543    2019-10-03  2
    WK15    IN007543    2019-10-03  3"
DF2 <- read.table(text = Lines, header = TRUE)
DF2$Date <- as.Date(DF2$Date)
1 голос
/ 05 октября 2019

Зачем нам нужно calendardays? Мы можем напрямую расширить DF2, используя tidyverse

library(tidyverse)

DF2 %>%
  mutate(Date = as.Date(Date), 
         seq_day = map2(Date, Date + offsetdate, seq, by = "1 day")) %>%
  unnest(seq_day) %>%
  select(-Date, -offsetdate)

#  LC    Custcode seq_day   
#  <fct> <fct>    <date>    
#1 RM11  IN007543 2019-10-03
#2 RM11  IN007543 2019-10-04
#3 RM11  IN007543 2019-10-05
#4 WK15  IN007543 2019-10-03
#5 WK15  IN007543 2019-10-04
#6 WK15  IN007543 2019-10-05
#7 WK15  IN007543 2019-10-06
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...