Для каждой отдельной птицы я хотел бы рассчитать разницу между измерениями средней почасовой температуры тела (Tb), проведенными в разные дни (Tb_Periods). Моя цель - сравнить изменения в Tb для BirdX с 0900 PreI до 09:00 DayI, с 10:00 PreI до 10:00 PostI и т. Д. Tb_Period представляет время до манипуляции (PreI), дня манипуляции (DayI) и пост-манипуляции (PostI). Мой начальный df:
Date_Time Bird_ID Tb Hour Treatment Tb_Period
2018-04-04 11:01:39 3282 42.2 11 Control PreI
2018-04-04 12:31:51 3282 41.2 12 Control PreI
....
2018-04-05 09:16:54 3282 41.9 9 Control DayI
....
2018-04-06 08:09:57 3282 41.4 8 Control PostI
Что я сделал до сих пор: Каждой птице измеряют температуру тела каждые 10 минут в течение 48 часов, поэтому я сначала вычислил среднее значение Tb каждой птицы для каждого часа, используя dplyr:
Tb_Averages <- TbData %>% group_by(Tb_Period, Hour, Bird_ID, Treatment)%>%
summarize(meanHourTb = mean(Tb))
Результирующий df:
Tb_Period Hour Bird_ID Treatment meanHourTb
PreI 9 3500 LPS 41.55000
PreI 10 3500 LPS 41.75000
...
DayI 9 3500 LPS 40.88182
DayI 10 3500 LPS 41.24000
Теперь я хотел бы, чтобы df выглядел так:
Bird_ID Hour Treatment Tb_Diff
3500 9 LPS -.67 (40.88-41.55)
3282 9 LPS .5 (e.g.)
На основании ответа от Рассчитать разницу между значениями в последовательных строках по группе , я пробовал варианты (с функцией dplyrs упорядочить):
Tb_Averages <- Tb_Averages %>%
group_by(Tb_Period, Bird_ID, Hour) %>%
mutate(Tb_Diff = c(NA, diff(meanHourTb))))
но продолжает получать NA для столбца Tb_Diff. Каков наилучший подход к решению этой проблемы (в идеале, с использованием dplyr)?