#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))