如何识别唯一 ID 和 R 中两个数据集的重叠
How to identify unique IDs and the overlap of two datasets in R
我正在处理两个数据集(数据集 1 和数据集 2),它们都包含大量客户电子邮件。
我想匹配识别每个数据集中哪些电子邮件是唯一的,哪些是“重叠”的(在两个数据集中都观察到)。我想以 3 个数据集结束:
- 一个具有数据集 1 独有的电子邮件
- 一个具有数据集 2 独有的电子邮件
- 一个包含在数据集 1 和数据集 2 中观察到的电子邮件(重叠)
这里有一个再现性的例子:
dataset1 <- data.frame(email = c("A", "B", "C", "D", "E" ))
dataset2 <- data.frame(email = c("X", "Y", "Z", "D", "E" ))
结果应该是:
- 结果 1 由电子邮件“A”、“B”、“C”组成
- 结果 2 由电子邮件“X”、“Y”、“Z”组成
- 结果 3 由电子邮件“D”、“E”组成
谢谢!
您可以使用 %in%
:
result1 <- subset(dataset1, !email %in% dataset2$email)
result1
# email
#1 A
#2 B
#3 C
result2 <- subset(dataset2, !email %in% dataset1$email)
result2
# email
#1 X
#2 Y
#3 Z
result3 <- subset(dataset1, email %in% dataset2$email)
result3
# email
#4 D
#5 E
也可以使用 tidyverse 中的过滤连接
library(tidyverse)
dataset1 <- data.frame(email = c("A", "B", "C", "D", "E" ))
dataset2 <- data.frame(email = c("X", "Y", "Z", "D", "E" ))
anti_join(dataset1, dataset2)
anti_join(dataset2, dataset1)
semi_join(dataset1, dataset2)
您可以使用 setdiff
求差,使用 intersect
求数据集的交集:
setdiff(dataset1$email, dataset2$email)
#[1] "A" "B" "C"
setdiff(dataset2$email, dataset1$email)
#[1] "X" "Y" "Z"
intersect(dataset1$email, dataset2$email)
#[1] "D" "E"
我正在处理两个数据集(数据集 1 和数据集 2),它们都包含大量客户电子邮件。 我想匹配识别每个数据集中哪些电子邮件是唯一的,哪些是“重叠”的(在两个数据集中都观察到)。我想以 3 个数据集结束:
- 一个具有数据集 1 独有的电子邮件
- 一个具有数据集 2 独有的电子邮件
- 一个包含在数据集 1 和数据集 2 中观察到的电子邮件(重叠)
这里有一个再现性的例子:
dataset1 <- data.frame(email = c("A", "B", "C", "D", "E" ))
dataset2 <- data.frame(email = c("X", "Y", "Z", "D", "E" ))
结果应该是:
- 结果 1 由电子邮件“A”、“B”、“C”组成
- 结果 2 由电子邮件“X”、“Y”、“Z”组成
- 结果 3 由电子邮件“D”、“E”组成
谢谢!
您可以使用 %in%
:
result1 <- subset(dataset1, !email %in% dataset2$email)
result1
# email
#1 A
#2 B
#3 C
result2 <- subset(dataset2, !email %in% dataset1$email)
result2
# email
#1 X
#2 Y
#3 Z
result3 <- subset(dataset1, email %in% dataset2$email)
result3
# email
#4 D
#5 E
也可以使用 tidyverse 中的过滤连接
library(tidyverse)
dataset1 <- data.frame(email = c("A", "B", "C", "D", "E" ))
dataset2 <- data.frame(email = c("X", "Y", "Z", "D", "E" ))
anti_join(dataset1, dataset2)
anti_join(dataset2, dataset1)
semi_join(dataset1, dataset2)
您可以使用 setdiff
求差,使用 intersect
求数据集的交集:
setdiff(dataset1$email, dataset2$email)
#[1] "A" "B" "C"
setdiff(dataset2$email, dataset1$email)
#[1] "X" "Y" "Z"
intersect(dataset1$email, dataset2$email)
#[1] "D" "E"