对于每只鸟,我想计算不同日期的平均每小时体温 (Tb) 测量值 (Tb_Periods) 之间的差异。我的目标是能够比较 BirdX 从 0900 PreI 到 09:00 DayI、10:00 PreI 到 10:00 PostI 等的 Tb 变化。 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
到目前为止我所做的:在 48 小时的时间内每 10 分钟测量每只鸡的体温,因此我首先使用 dplyr 计算每只鸡每小时的平均 Tb:
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.)
根据来自的回答按组计算连续行中的值之间的差异 https://stackoverflow.com/questions/14846547/calculate-difference-between-values-in-consecutive-rows-by-group,我尝试过以下变体(使用 dplyrs 排列功能):
Tb_Averages <- Tb_Averages %>%
group_by(Tb_Period, Bird_ID, Hour) %>%
mutate(Tb_Diff = c(NA, diff(meanHourTb))))
但继续获取 Tb_Diff 列的 NA。解决这个问题的最佳方法是什么(最好使用 dplyr)?