Search code examples
rlubridate

Merge two df´s with different date formats in R


I have two data frames and want to merge them by date. The problem is, df1 (my main df which I want to keep) has hourly observations, df2 has daily ones. I´d like to merge them so that if df1 has multiple observations in a day, i transfer some observations from df2 twice.

Example df´s:

Time_df1 <- c(ymd_hms("2017-11-28T14:02:00"),
              ymd_hms("2017-11-28T18:00:00"),
              ymd_hms("2020-08-24T20:30:00"), 
              ymd_hms("2020-10-01T02:02:00"),
              ymd_hms("2021-03-12T23:05:00"))
Measurement_df1 <- c(0.1,0.2, 0.5, 0.8, 0.7)
df1 <- data.frame(Time_df1, Measurement_df1)

Time_df2 <- c(as_date(17498), as_date(18498), as_date(18698))
Measurement_df2 <- c(11, 42, 28)
df2 <- data.frame(Time_df2, Measurement_df2)

Aim df:

Measurement_df2 <- c(11, 11, 42, NA, 28)
df_aim <- data.frame(Time_df1, Measurement_df1, Measurement_df2)

Solution

  • convert the timevariable to a date before the join

    df1 %>% 
      dplyr::mutate(Time_df1date = as.Date(Time_df1)) %>% 
      dplyr::left_join(df2, by = c("Time_df1date" = "Time_df2")) %>%
      dplyr::select(-Time_df1date)