清晰的方法,使用不同列中的ID匹配观测值

问题描述 投票:0回答:1

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  
r tidyverse identity matching
1个回答
0
投票
给予

> 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
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.