Я пытаюсь найти значение скользящего окна для данных акселерометра для каждого животного. Акселерометры были установлены на нескольких животных, и они включались и выключались в течение дня, поэтому это не непрерывный сигнал. Они записывают со скоростью 10 Гц, или 10 значений в секунду ... так что вы увидите ниже, что у моего datetime есть доли секунды. Там, где нет доступных данных, я хочу, чтобы они просто использовали доступные данные. Я хотел бы 2-секундное окно, которое смотрит на обе стороны текущего времени. Поэтому, если дата и время находятся на грани, у него будет только 1 секунда значений, влияющих на его среднее значение.
animalID <- c("a", "a", "a", "a", "a", "a", "a", "a", "a", "a",
"b", "b", "b", "b", "b",
"c", "c", "c", "c", "c" )
datetime <- as.POSIXct(c("2014-01-19 09:11:18.313 PST", #a
"2014-01-19 09:11:18.411,PST",
"2014-01-19 09:11:18.509 PST",
"2014-01-19 09:11:18.608 PST",
"2014-01-19 09:11:19.706 PST",
"2014-01-19 09:11:19.803 PST",
"2014-01-19 09:11:19.901 PST",
"2014-01-19 09:11:20.000 PST",
"2014-01-19 09:11:20.098 PST",
"2014-01-19 09:11:20.196 PST",
"2014-01-19 09:11:18.313 PST", #b
"2014-01-19 09:11:19.391 PST",
"2014-01-19 09:15:20.490 PST",
"2014-01-19 09:15:20.588 PST",
"2014-01-19 09:15:20.686 PST",
"2014-01-19 09:11:20.783 PST", #c
"2014-01-19 09:11:20.881 PST",
"2014-01-19 09:11:20.980 PST",
"2014-01-19 09:11:21.078 PST",
"2014-01-19 09:11:21.176 PST"))
accx <- c(111, 109, 110, 110, 110, 110, 110, 110, 110, 110,
87, 89, 87, 89, 88,
98, 100, 98, 100, 99)
accy <- c(10, 11, 10, 10, 10, 9, 10, 10, 10, 10,
21, 24, 21, 24, 22,
32, 34, 32, 34, 33)
df <- data.frame(animalID, datetime, accx, accy)
# example of how I would generally like this to perform
# for animal == a, datetime == 2014-01-19 09:11:19.803 PST
window <- 2
i <- 6
starttime <- df<span class="math-container">$datetime[i] - window/2
endtime <- df$</span>datetime[i] + window/2
interval <- df[df<span class="math-container">$datetime >= starttime &
df$</span>datetime < endtime, c("accx", "accy")]
interval %>% summarise_each(list(mean))
Я посмотрел на filter (), filterfilt (), tsibble, movingaves (), tidyquant () и другие. Я изо всех сил, потому что несколько животных могут иметь данные за одни и те же даты, поэтому я не могу просто индексировать, используя столбец datetime. И я не могу найти пример, который использует доли секунды. Я видел некоторые решения, которые используют fill_gaps () и другие функции для заполнения недостающих данных и создания непрерывного сигнала, но у меня есть 100 животных с данными о 10 днях на животное, поэтому заполнение пробелов кажется неэффективным. Любая помощь приветствуется!