Примите значение, если выполнены условия в двух кадрах данных или условие в одном кадре данных почти равно условию во втором кадре данных

#r #if-statement #lubridate

Вопрос:

Я хотел бы объединить два кадра данных: (скажем, A и B). Каждый из них имеет два столбца: ymd_hms и значение 1 в кадре данных, в то время как ymd_hms и значение 2 в кадре данных B. Но ymd_hms в кадре данных и ymd_hms в кадре данных B всегда одинаковы. Вот в чем вопрос. Я хотел бы взять значение 2 из фрейма данных B, если

  1. ymd_hms в кадре данных равен ymd_hms в кадре данных B, или
  2. ymd_hms в кадре данных более или менее равно ymd_hms в кадре данных B (т. Е. Допустима разница в одну или две минуты). Не могли бы вы, пожалуйста, помочь мне, как это закодировать?

 A %gt;%   mutate(Value 2 = ifelse (A$ymd_hms == B$ymd_hms|  A$ymd_hms == which(B$ymd_hms   minute(2)), B$ymd_hms - (minute(2)), Value 2, NA)  

Я не получил ожидаемого результата.

Комментарии:

1. Это звучит так, как будто вы могли бы попробовать что-то вроде fuzzyjoin пакета или использовать что-то вроде неэквивалентного соединения или foverlaps с data.table помощью . Эти типы соединений могут хорошо работать с 2 кадрами данных, и вы можете указать разницу во времени. Если вы предоставите некоторые примеры данных (как выглядят таблицы A и B, возможно, несколько строк данных) и желаемый результат, вы, скорее всего, получите ответ с примером кода, использующим один из этих подходов.