簡體   English   中英

循環遍歷並將一個數據幀與另一個數據幀匹配,查找列每次都取一個唯一的行(就另一列中的值而言)

[英]loop through and match one dataframe to another with a lookup column taking a unique row each time (in terms of value in another column)

我不知道我是否在錯誤地搜索問題,因為它很難解釋,但到目前為止我還沒有在網上找到任何答案! 基本上我有兩個數據幀,DF1 有 120 行,DF2 有 22000 行。 它們都有一個“查找”列,基於其他三個列的值。 它們看起來像這樣(一個子集):

DF1:

抬頭
EM1PRI
EM1PRI
EM2PRI
EM3PRI
EM3PRI

DF2:

抬頭 ID
EM1PRI 14567
EM1PRI 12345
EM1PRI 13456
EM1PRI 15678
EM2PRI 16789
WM1PRI 17890

我想從 DF2 獲取每個可用匹配項的 ID 到 DF1 中的查找列,循環遍歷而不替換,因此每個 ID 都是唯一的。 如果沒有可用的,那么它需要是 NA。 這就是我希望輸出的外觀:

DF3:

抬頭 ID
EM1PRI 14567
EM1PRI 12345
EM2PRI 16789
EM3PRI 不適用
EM3PRI 不適用

我不知道這是循環還是匹配或合並,還是三者兼而有之。 非常感謝您的任何建議!

一種方法是對兩個 data.frames 中的每個Lookup值使用行號,然后連接Lookup值和行號。

library(dplyr)

df1 %>%
  group_by(Lookup) %>%
  mutate(rn = row_number()) %>%
  left_join(df2 %>% 
              group_by(Lookup) %>%
              mutate(rn = row_number())) %>%
  dplyr::select(-rn)

輸出

  Lookup    ID
  <chr>  <dbl>
1 EM1PRI 14567
2 EM1PRI 12345
3 EM2PRI 16789
4 EM3PRI    NA
5 EM3PRI    NA

數據

df1 <- structure(list(Lookup = c("EM1PRI", "EM1PRI", "EM2PRI", "EM3PRI", 
"EM3PRI")), class = "data.frame", row.names = c(NA, -5L))

df2 <- structure(list(Lookup = c("EM1PRI", "EM1PRI", "EM1PRI", "EM1PRI", 
"EM2PRI", "WM1PRI"), ID = c(14567, 12345, 13456, 15678, 16789, 
17890)), class = "data.frame", row.names = c(NA, -6L))

暫無
暫無

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

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