Я пытаюсь вычислить темпы роста между конкретными строками после группировки по другой переменной (аналогично other users ).
Вот пример моих данных:
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)
, используя пакет library(dplyr)
.
То, что я пытаюсь сделать, это рассчитать темп роста между:
- последнее наблюдение и второе последнее наблюдение, разделенное на прошедшее время (last_wt-second_last_wt / last_age-second_last_age): [используя
squirrel_id
22640: (196-121) / (84-52)], а затем добавьте столбец с именем «Испытание» с надписью «2»
- второе последнее наблюдение и третье последнее наблюдение, разделенное на прошедшее время (second_last_wt-third_last_wt / second_last_age-third_last_age): [используя
squirrel_id
22640: (121-49.2) / (52-24)], а затем добавьте столбец называется «испытание», которое говорит «1»
Хотя есть одна загвоздка:
, если squirrel_id
виден в общей сложности 3 раза или меньше (например, squirrel_id
22639 и 23943), то у обычно было бы только 1 испытание и, следовательно, 1 расчет скорости роста ,
НО, если 2 наблюдения имеют возраст> 40 дней (например, squirrel_id
23760), то у них было 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()
решение, если это возможно.