IAM使用Mark-recapture数据,每个人都有一个PIT标签(
Tag
)和第一个观察(ID
)给出的遗传样本ID,通常用作个体的ID(Unified.ID
)。但是,有时动物会丢失坑标签,我们必须重新序列,但是如果我们知道它的旧标签号,我们将其记录为Alt_tag
.。
此示例数据是来自同一个人的四个观察结果,因此我试图通过将第4行中的第4行与第1:3行中的
Unified.ID
相匹配,以使它们都具有相同的观察。 4行最终在Alt_tag
列中以“ Cal163037”。
Tag
我认为我有点与下面的代码有些紧密,但是我觉得有一种更优雅的方法可以做到这一点,最好是使用某种Dplyr突变,因此更容易检查它正在做我想要的事情要(我无法在突变()内部使用此IF_ELSE函数)。我的完整数据集很大,所以我想确信它在整个过程中正常工作。关于如何清理此问题的任何想法?
Unified.ID
您可以尝试一下吗?
sample.dat<-tibble(ID=c("CAL163037",NA,NA,NA),
Tag = c("132800","132800","132800","981930"),
Date = c("2016-08-23","2017-06-09","2017-06-22","2017-08-23"),
Alt_tag = c(NA,NA,NA,"132800"),
Unified.ID = c("CAL163037","CAL163037","CAL163037","981930"))
# A tibble: 4 × 5
ID Tag Date Alt_tag Unified.ID
<chr> <chr> <chr> <chr> <chr>
1 CAL163037 132800 2016-08-23 NA CAL163037
2 NA 132800 2017-06-09 NA CAL163037
3 NA 132800 2017-06-22 NA CAL163037
4 NA 981930 2017-08-23 132800 981930
> if_else(is.na(sample.dat$Alt_tag)==FALSE,(sample.dat[
which(sample.dat$Tag%in%sample.dat$Alt_tag),"Unified.ID"]%>%distinct()),NA)
# A tibble: 4 × 1
# Groups: Unified.ID [1]
Unified.ID
<fct>
1 CAL163037
2 CAL163037
3 CAL163037
4 CAL163037