【发布时间】:2019-10-14 02:00:46
【问题描述】:
我试图在按另一个变量分组后计算特定行之间的增长率(类似于otherusers)。
这是我的数据示例:
squirrel_id wt age trialdate
22639 9.7 0 2017-04-20
22639 45.9 24 2017-05-14
22639 130 53 2017-06-12 #caught 3x, 1 trial
22640 10.3 0 2017-04-20
22640 49.2 24 2017-05-14
22640 121 52 2017-06-11
22640 196 84 2017-07-13 #caught 4x, 2 trials
23943 12.9 1 2018-04-27
23943 57.2 26 2018-05-23 #caught 2x, 1 trial
23760 150 73 2018-06-18
23760 165 84 2018-06-29 #caught 2x, 2 trials
为了以这种形式获取这些数据,我确保首先使用arrange_by(squirrel_id) 包。
我要做的是计算以下之间的增长率:
- 最后一次观察和倒数第二次观察除以已经过去的时间 (last_wt-second_last_wt/last_age-second_last_age): [使用
squirrel_id22640: (196-121)/(84-52)] 然后添加一个名为“试验”表示“2” - 倒数第二个观察值和倒数第三个观察值除以经过的时间 (second_last_wt-third_last_wt/second_last_age-third_last_age):[使用
squirrel_id22640: (121-49.2)/(52-24)] 然后添加一列称为“试验”,上面写着“1”
有一个问题:
如果
squirrel_id总共出现 3 次或更少(如squirrel_id22639 和 23943),那么他们通常只会进行 1 次试验,因此增长率为 1计算。但是,如果 2 个观察值的年龄 > 40 天(如
squirrel_id23760),那么他们进行了 2 次试验。
我希望最终的数据集看起来像:
squirrel_id wt age trialdate g.rate trial
22639 9.7 0 2017-04-20 NA NA
22639 45.9 24 2017-05-14 NA NA
22639 130 53 2017-06-12 3.0 1 #caught 3x, 1 trial
22640 10.3 0 2017-04-20 NA NA
22640 49.2 24 2017-05-14 NA NA
22640 121 52 2017-06-11 2.6 1
22640 196 84 2017-07-13 2.3 2 #caught 4x, 2 trials
23943 12.9 1 2018-04-27 NA NA
23943 57.2 26 2018-05-23 1.7 1 #caught 2x, 1 trial
23760 150 73 2018-06-18 NA 1
23760 165 84 2018-06-29 1.4 2 #caught 2x, 2 trials
如果可能的话,我更喜欢dplyr() 解决方案。
【问题讨论】:
标签: r conditional-statements dplyr