Два кадра данных с одинаковыми столбцами, подмножество один, если время столбца в течение 24 часов в R - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть два фрейма данных с одинаковыми переменными заголовками, я хотел бы установить df1 на df2, если есть совпадение в имени человека и если время его заказа меньше 24 часов.

Name <- c("MCCARTNEY, PAUL", "STARR, RNGO", "HARRISON, GEORGE", "LENNON, JOHN")
Order_TM <-c("3/4/2020 15:16", "3/4/2020 15:16", "3/4/2020 15:16","3/4/2020 19:30")
df1 <-data.frame(Name, Order_TM)

В df2 у меня одинаковые имена, но разное время заказа

Name <- c("MCCARTNEY, PAUL", "STARR, RNGO", "HARRISON, GEORGE", "LENNON, JOHN")
Order_TM <-c("3/4/2020 18:16", "3/4/2020 20:16", "3/6/2020 15:16","3/5/2020 12:00")
df2 <-data.frame(Name, Order_TM)

Я хочу установить df1, если Order_TM меньше 24 часов от Order_TM в df2. Исходя из моего примера, результатом будет MCCARTNEY, PAUL, STARR, RIN GO и LENNON, JOHN. Но я не смог найти способ сделать это.

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Если вы предпочитаете решение dplyr, вы можете попробовать это:

library(dplyr)
library(lubridate)
df1 %>% 
  left_join(df2,by = "Name") %>%
  mutate(Order_TM = Order_TM.x, TimeDiff = mdy_hm(Order_TM.x) - mdy_hm(Order_TM.y)) %>%
  filter(abs(TimeDiff) <= 24) %>%
  dplyr::select(-Order_TM.y,-Order_TM.x)
#             Name       Order_TM    TimeDiff
#1 MCCARTNEY, PAUL 3/4/2020 15:16  -3.0 hours
#2     STARR, RNGO 3/4/2020 15:16  -5.0 hours
#3    LENNON, JOHN 3/4/2020 19:30 -16.5 hours
1 голос
/ 30 апреля 2020
# convert data frames to data.tables
library(data.table)
setDT(df1)
setDT(df2)

# convert Order_TM to datetime format
df1[, Order_TM := as.POSIXct(Order_TM, format = '%m/%d/%Y %R')]
df2[, Order_TM := as.POSIXct(Order_TM, format = '%m/%d/%Y %R')]

# join to find difference in hours between datetimes
df1[df2, on = .(Name), time_diff := abs(difftime(i.Order_TM, Order_TM, 'hours'))]

# subset based on time difference
df1[time_diff < 24]
#               Name            Order_TM  time_diff
# 1: MCCARTNEY, PAUL 2020-03-04 15:16:00  3.0 hours
# 2:     STARR, RNGO 2020-03-04 15:16:00  5.0 hours
# 3:    LENNON, JOHN 2020-03-04 19:30:00 16.5 hours
...