[英]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.