R语言按驼鹿分组计算超温度阈值天数乘超温值的热应激指数
R实现按个体分组的驼鹿热应激指数计算
我正在使用R处理驼鹿遥测数据集,数据包含多只驼鹿个体、每只驼鹿每日多条GPS定位记录以及每日采集的温度数据。我需要构建热应激指数,具体规则如下:
- 统计单只驼鹿经历温度高于-5℃的连续天数,将该天数乘以超过阈值的温度差值
- 每次温度低于-5℃时,高于阈值的天数计数重置
- 温度低于-5℃的数据点对应指数值设为NA,不需要计算这部分的指数
由于不同驼鹿的定位采集日期并不完全重合,上述计算需要按每只驼鹿单独执行。
我现有数据集包含Moose(驼鹿个体编号)、Date(记录日期)、Temperature(当日温度)字段,需要生成目标列TempIndex(热应激指数),示例效果如下:
例如2013-01-01驼鹿1(M1)和驼鹿2(M2)所处环境温度为2℃,比-5℃阈值高7℃,且是连续高于阈值的第2天,因此生成的指数为14(即2*7)。
示例代码和数据如下:
Moose <- c('M1','M1','M1','M1', 'M1','M1','M1','M1', 'M1','M1','M1','M1', 'M2','M2','M2','M2', 'M2','M2','M2','M2', 'M2','M2','M2','M2') Date <- as.Date(c('2012-12-30','2012-12-31','2012-12-31','2013-01-01', '2013-01-01','2013-01-01','2013-01-02','2013-01-02', '2013-01-03','2013-01-03','2013-01-04','2013-01-04', '2012-12-30','2012-12-30','2012-12-31','2012-12-31', '2013-01-01','2013-01-01','2013-01-02','2013-01-02', '2013-01-02','2013-01-03','2013-01-04','2013-01-04')) Temperature <- c(-6,-4,-4, 2, 2, 2,-8,-8, 1, 1,-9,-9, -6,-6,-4,-4, 2, 2,-8,-8, -8, 1,-9,-9) TempIndex <- c(NA, 1, 1,14, 14,14,NA,NA, 6, 6,NA,NA, NA,NA, 1, 1, 14,14,NA,NA, NA, 6,NA,NA) dat <- data.frame(Moose,Date,Temperature,TempIndex) dat
运行后输出的数据集结构如下:
Moose Date Temperature TempIndex 1 M1 2012-12-30 -6 NA 2 M1 2012-12-31 -4 1 3 M1 2012-12-31 -4 1 4 M1 2013-01-01 2 14 5 M1 2013-01-01 2 14 6 M1 2013-01-01 2 14 7 M1 2013-01-02 -8 NA 8 M1 2013-01-02 -8 NA 9 M1 2013-01-03 1 6 10 M1 2013-01-03 1 6 11 M1 2013-01-04 -9 NA 12 M1 2013-01-04 -9 NA 13 M2 2012-12-30 -6 NA 14 M2 2012-12-30 -6 NA 15 M2 2012-12-31 -4 1 16 M2 2012-12-31 -4 1 17 M2 2013-01-01 2 14 18 M2 2013-01-01 2 14 19 M2 2013-01-02 -8 NA 20 M2 2013-01-02 -8 NA 21 M2 2013-01-02 -8 NA 22 M2 2013-01-03 1 6 23 M2 2013-01-04 -9 NA 24 M2 2013-01-04 -9 NA
内容的提问来源于stack exchange,提问作者Kelly.M
相关产品推荐
相关产品推荐

