Search code examples
rdatesubsetlubridate

Running into issues with subsetting after subtracting dates?


I am running into issues with subsetting after subtracting dates using lubridate. I have a dataframe:

customerid <- c("A1", "A1", "A2", "A2", "A3", "A3", "A3", "A4")
orderdate <- c("2018-09-14", "2018-09-14", "2018-09-15", "2018-09-15", "2020-08-21", "2020-08-21","2020-08-21", "2018-08-10")
returndate <- c("2018-09-15", "2018-09-18", "2018-09-20", "2019-09-15", "2021-08-20", "2020-07-21","2020-09-21", "2018-08-15")
orderid <- c("1", "2", "3", "4", "5", "6", "7", "8")
df <- data.frame(customerid, orderdate, returndate, orderid)

I then want to subset difference = 1 day. Here is my code:

df$orderdate <- as.Date(df$orderdate, format="%m/%d/%Y")
df$resultdate <- as.Date(df$resultdate, format="%m/%d/%Y")
df$order_result_datediff <- difftime(df$orderdate, df$resultdate, units = "days" ) 
df$nextday <- subset(df, df$order_result_datediff == '1 day')

The subsetting does not work, and I just get all the results in the column. Thank you!


Solution

  • Would this work?

    library(lubridate)
    library(dplyr)
    customerid <- c("A1", "A1", "A2", "A2", "A3", "A3", "A3", "A4")
    orderdate <- c("2018-09-14", "2018-09-14", "2018-09-15", "2018-09-15", "2020-08-21", "2020-08-21","2020-08-21", "2018-08-10")
    returndate <- c("2018-09-15", "2018-09-18", "2018-09-20", "2019-09-15", "2021-08-20", "2020-07-21","2020-09-21", "2018-08-15")
    orderid <- c("1", "2", "3", "4", "5", "6", "7", "8")
    df <- data.frame(customerid, orderdate, returndate, orderid)
    
    df$orderdate <- ymd(df$orderdate)
    df$resultdate <- ymd(df$returndate)
    df$order_result_datediff <- interval(df$orderdate, df$resultdate) / days(1)
    df2 <- df %>%
      filter(order_result_datediff == 1)
    df2
    #>   customerid  orderdate returndate orderid resultdate order_result_datediff
    #> 1         A1 2018-09-14 2018-09-15       1 2018-09-15                     1
    

    Created on 2023-03-29 with reprex v2.0.2