簡體   English   中英

根據r中的ID從一列中查找另一列中的值

[英]Find values from one column in another column according to ID in r

我有一個數據框,每個 ID 都有多個條目。 ID 有一個參考號 (NEW_REF) 和一個舊參考號 (OLD_REF)。 我需要為每個 ID 找到最新的參考號,這意味着舊參考號列中沒有的參考號。

ID <- c(1,2,3,4,1,3,5,2,4,1,3,4)     
NEW_REF <- c("TS101","TS253","TS565","TS789","TD123","TS101","TD367","TH152","TD123","TF908","TD256","TS898")
OLD_REF <- c("TD123","TH152","TS101","TD123","TF908","TD256","TG232","TR142","TS898","TR268","TB496","TD969")
DF <- data.frame(ID,NEW_REF ,OLD_REF )

DF$Active_ind <- NA
DF$Active_ind[which(DF$NEW_REF %in% DF$OLD_REF )] <-"N"    #if a reference number is in the old reference number column it is not active or not the most recent
DF$Active_ind[which(!(DF$NEW_REF %in% DF$OLD_REF ))] <-"Y"   #if a reference number is not in the old reference number column it is active or the most recent

    ID NEW_REF OLD_REF Active_ind
1   1   TS101   TD123          N
2   2   TS253   TH152          Y
3   3   TS565   TS101          Y
4   4   TS789   TD123          Y
5   1   TD123   TF908          N
6   3   TS101   TD256          N
7   5   TD367   TG232          Y
8   2   TH152   TR142          N
9   4   TD123   TS898          N
10  1   TF908   TR268          N
11  3   TD256   TB496          N
12  4   TS898   TD969          N

我的問題是 ID 1 有一個新的引用 TS101(第 1 行),而 ID 3 有一個舊的引用 TS101(第 3 行)。 如果參考編號不唯一,我如何檢查每個 ID哪個參考編號是最新的。

我希望第 1 行的 Active_ind 列中有一個 Y:

    ID NEW_REF OLD_REF Active_ind
1   1   TS101   TD123          Y
2   2   TS253   TH152          Y
3   3   TS565   TS101          Y
4   4   TS789   TD123          Y
5   1   TD123   TF908          N
6   3   TS101   TD256          N
7   5   TD367   TG232          Y
8   2   TH152   TR142          N
9   4   TD123   TS898          N
10  1   TF908   TR268          N
11  3   TD256   TB496          N
12  4   TS898   TD969          N

我知道 for 循環是可能的,但我想避免它,因為我的數據集有超過 40 000 個不同的 ID,並且在使用循環時變得非常耗時。

我們可以使用dplyrID對它們進行分組,然后檢查OLD_REF NEW_REF ,並相應地為它們提供值。

library(dplyr)
DF %>%
   group_by(ID) %>%
   mutate(Active_Ind = ifelse(NEW_REF %in% OLD_REF, "N", "Y"))


#     ID NEW_REF OLD_REF Active_Ind
#   <dbl>  <fctr>  <fctr>      <chr>
#      1   TS101   TD123          Y
#      2   TS253   TH152          Y
#      3   TS565   TS101          Y
#      4   TS789   TD123          Y
#      1   TD123   TF908          N
#      3   TS101   TD256          N
#      5   TD367   TG232          Y
#      2   TH152   TR142          N
#      4   TD123   TS898          N
#      1   TF908   TR268          N
#      3   TD256   TB496          N
#      4   TS898   TD969          N

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM