[英]adding values from one column of a data frame into a new column of another dataframe if the first two columns in both match
[英]How can I check that two columns in one dataframe both match two columns in another dataframe?
我有一個這樣的數據框A:
name <- c("John", "Bill", "Amy", "Bill", "Mia")
Present.ID <- c(12345, 678910, 12345, 8090100, 246810)
A <- as.data.frame(cbind(name, Present.ID))
一個像這樣的數據框B:
name <- c("John", "Bill", "Amy", "Bill", "Mia")
Applied.ID <- c(12345, 678910, 12345, 8090100, NA)
B <- as.data.frame(cbind(name, Applied.ID))
我想確保/檢查數據框 A 中的某個名稱是否存在 ID,並且數據框 B 中的相同名稱也存在該 ID。所有名稱都是唯一的,因此如果名稱出現兩次,則表示該名稱具有兩個不同的ID在不同的時間,卻是同一個人。 但是,某些名稱共享一個 ID。 在我的實際數據框中,還有許多沒有分配任何 ID 的名稱。
我的解決方案是檢查數據框 A 中的 Name 和 Present.ID 列的組合是否等同於數據框 B 中的 Name 和 Applied.ID 列的組合。
我正在尋找可以執行類似操作的功能
A$check <- A$Present.ID %in% B$Applied.ID
但也增加了名稱列匹配的要求。
我希望輸出看起來像這樣:
|name | Applied.ID | check|
|-----|------------|------|
|John | 12345 | TRUE |
|Bill | 678910 | TRUE |
|Amy | 12345 | TRUE |
|Bill |8090100 | TRUE |
|Mia | NA | FALSE|
如果有什么令人困惑的地方,我很樂意澄清。 謝謝你的幫助!
使用interaction
:
cbind(A, check = interaction(A) %in% interaction(B))
name Present.ID check
1 John 12345 TRUE
2 Bill 678910 TRUE
3 Amy 12345 TRUE
4 Bill 8090100 TRUE
5 Mia 246810 FALSE
甚至:
cbind(A, check = do.call(paste, A) %in% do.call(paste, B))
name Present.ID check
1 John 12345 TRUE
2 Bill 678910 TRUE
3 Amy 12345 TRUE
4 Bill 8090100 TRUE
5 Mia 246810 FALSE
您可以使用mapply
檢查項目是否匹配,然后在每一行上應用all
:
A$check <- apply(mapply(`%in%`, A, B), 1, all)
name Present.ID check
1 John 12345 TRUE
2 Bill 678910 TRUE
3 Amy 12345 TRUE
4 Bill 8090100 TRUE
5 Mia 246810 FALSE
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.