Я пытаюсь рассчитать рост для людей из большого набора данных захвата/маркировки/повторной поимки. У меня есть данные для каждого отмеченного человека, но не все из них были отловлены. В принципе, я фиксирую и маркирую людей определенного размера. Через некоторое время я фиксирую и отмечаю людей большего размера. Некоторые из них уже отмечены повторной поимкой, в то время как другие - новые люди.Вычисление роста отдельных повторных захватов в R
Что я хотел бы сделать, так это взять этот набор данных, а затем увеличить число вычислений для возвращенных лиц. На его базе это довольно просто. Каждый возвращенный человек будет иметь один и тот же номер тега. Таким образом, мне просто нужно вычесть общую длину (TL), когда человек был впервые отмечен от TL при повторной поимке. Однако я не знаю, как сказать R выбрать предыдущую строку на основе определенного столбца, а затем применить к ней функцию. Мне сложно понять, что значения, которые я пытаюсь сопоставить, находятся в одном столбце. Я посмотрел на% в% и попытался выяснить, есть ли у plyr что-нибудь, что сработает, но ничего не могло найти.
EDIT: более длинный фрейм данных для обработки нескольких (более 2) повторных захватов одного и того же человека. В этом случае следует рассчитывать рост от первоначального захвата.
Я создал фрейм выборки данных, используя следующие:
tlran=c(rnorm(5,mean=50,sd=5),rnorm(5,mean=200,sd=5), rnorm(5,mean=400,sd=10))
TaggingData=as.data.frame(trunc(tlran,0))
names(TaggingData)="TL"
TaggingData$Tag=c(1,2,3,4,5,6,1,7,3,4,8,1,9,10,3)
TaggingData$Date=c("01.01.2015","01.01.2015","01.01.2015","01.01.2015","01.01.2015","01.01.2016","01.01.2016","01.01.2016","01.01.2016","01.01.2016","01.01.2017","01.01.2017","01.01.2017","01.01.2017","01.01.2017")
Так что мой образец данных выглядит следующим образом:
>TaggingData
TL Tag Date
1 36 1 01.01.2015
2 44 2 01.01.2015
3 51 3 01.01.2015
4 49 4 01.01.2015
5 50 5 01.01.2015
6 203 6 01.01.2016
7 198 1 01.01.2016
8 203 7 01.01.2016
9 193 3 01.01.2016
10 210 4 01.01.2016
11 403 8 01.01.2017
12 402 1 01.01.2017
13 393 9 01.01.2017
14 391 10 01.01.2017
15 415 3 01.01.2017
EDIT: Вручную, что я хотел бы мои данные, чтобы выглядеть следующим образом:
>TaggingData
TL Tag Date Growth
1 36 1 01.01.2015 NA
2 44 2 01.01.2015 NA
3 51 3 01.01.2015 NA
4 49 4 01.01.2015 NA
5 50 5 01.01.2015 NA
6 203 6 01.01.2016 NA
7 198 1 01.01.2016 162
8 203 7 01.01.2016 NA
9 193 3 01.01.2016 142
10 210 4 01.01.2016 161
11 403 8 01.01.2017 NA
12 402 1 01.01.2017 366
13 393 9 01.01.2017 NA
14 391 10 01.01.2017 NA
15 415 3 01.01.2017 364
в принципе, я хочу Р понимать, что, так как количество тегов в строке 7 идентична той, в строке 1 TL для строки 7 следует вычесть из TL в строке 1 и идеально записать в новый столбец, например TaggingData $ Growth.
Я, к сожалению, полностью потерян здесь. Я могу выбрать дубликаты тегов с использованием дубликатов (TaggingData $ Tag), но я чувствую, что это не помогает мне.
Может ли кто-нибудь предложить пакет/функции для просмотра или даже помочь мне с кодом?
EDIT: Я попробовал предложенный агрегат, а также пакет data.table со следующим кодом:
Recap=data.table(TaggingData)
setkey(Recap,Tag)
Recap[,diff:=c(NA,diff(TL)),by=Tag]
В то время как это дает мне цифры Я ищу, форматирование не совсем то, что я надеялся и потребовал бы довольно много работы, чтобы очистить его до того, что мне нужно, чтобы продолжить работу с данными.
Можете ли вы привести свой пример ab он больше? Что происходит, когда 1 появляется в третий раз? Вы выходите из строки с 7 по 197 ?. –
@Roman, это на самом деле то, о чем мне было интересно. Кажется, я могу получить что-то, работающее с data.table, но пока он вычисляет темпы роста для меня, он не выдает форматирования, на которое я надеялся. Я отредактирую свой оригинальный вопрос и разберусь. –