Как использовать %внутри% lubricate в сочетании с dplyr?

#r #datetime #dplyr #intervals

#r #дата и время #dplyr #интервалы

Вопрос:

Я пытаюсь отфильтровать данные датчиков, которые присутствуют в «неактивных рабочих сменах». Это означает, что я хочу сравнить каждый элемент DateTime фрейма данных со списком интервалов, чтобы проверить, были ли данные датчика записаны во время такого сдвига.

Я строю все временные интервалы следующим образом:

 INAS_intervals <- raw_sensor_data %>%
            filter(error_code == "INAS") %>%
            summarise(inactive = interval(ymd_hms(from), ymd_hms(to)))
 

В результате чего:

 inactive
<S4: Interval>
2019-08-03 06:00:00 UTC--2019-08-03 12:30:00 UTC                
2019-08-03 12:30:00 UTC--2019-08-04 06:00:00 UTC                
2019-08-04 06:00:00 UTC--2019-08-04 12:30:00 UTC    
 

Построение фильтра таким образом (сломано):

 saw %>%  
  filter(any(dateTime %within% INAS_intervals)) %>%
  mutate(diffi = abs(machSpeed - curMachSpeed)) 
 (...)


> longer object length is not a multiple of shorter object length...
 

Почему невозможно использовать %внутри% со столбцом ‘DateTime’ (тип: POSIXct) таким образом?

Примечание сбоку:

 any(saw[1,1] %within% INAS_intervals)

>Error in saw[1, 1] %within% INAS_intervals : 
  No %within% method with signature a = tbl_df,  b = tbl_df
 

Но это работает нормально:

 any(saw[[1,1]] %within% INAS_intervals)

[1] FALSE
 

Должен ли я использовать lapply(), sapply() или apply() в этом случае? У меня очень мало опыта в использовании этой техники. Заранее спасибо за любую помощь!

Ответ №1:

Здесь требуется rowwise

 library(dplyr)
saw %>% 
  rowwise %>% 
  filter(dateTime %within% INAS_intervals) %>%
  ungroup %>%
   mutate(diffi = abs(machSpeed - curMachSpeed))