如何获得两个多组之间的共同值?

数据挖掘 r
2022-02-27 10:17:45

我在 R 工作。我有两个向量;A 和 B 的长度分别为 5913 和 3733(重复条目)。我想提取A和B中都存在的那些值(重复)。我已经完成了(A %in% B)(我们称之为C)和(B %in% A)(我们称之为D)。C 的长度是 3906,D 的长度是 3607(所以 A 中的 2007 个元素不在 B 中,B 中的 126 个元素不在 A 中)。

但是我如何找到共同的价值观?我认为我不能使用 intersect() 方法,因为它需要没有重复值的向量。我有很多很多重复。

注意:由于这些向量的长度,我不能在这里提及它们。

任何帮助将不胜感激。

谢谢

3个回答

由于您在 A 和 B 中有多次重复,并且这两个向量的长度不同(5913 和 3733),因此预计向量 C 和 D 的大小不同。但是,C 和 D 可能包含相同的唯一元素。

让我们以Biswajit Banerjee提出的例子为例:

A = c(1,1,2,2,3,3,4,4,5,5,6,6,9,11,15,17,19,19)
B = c(1,2,2,2,3,3,3,4,5,6,7,8,8,8)

C= A[(A %in% B)]
D = B[(B %in% A)]

all(unique(C) == unique(D))
TRUE

您可以验证长度为 2007 和 126 的向量 C 和 D 是否包含相同的唯一值。它解决了你的问题吗?

C <- intersect(unique(A), unique(B))行得通吗

然后,您可以从重复项A[A %in% C]中获取它们 。A

我认为@biswajit-banerjee 评论(和其他评论)应该会有所帮助。

当你说,,How do I find the common values我假设你正在看

  1. 存在于另一个向量中的 A 的值,或
  2. 存在于另一个向量中的 B 的值,或
  3. 任一向量中存在的唯一值。

第三个很棘手,因为您没有相等长度的向量。因此没有可以映射的索引。因此,在这种情况下,选项应该是@michaelg 提到的每个向量的唯一值的交集。

以下是几种方法,具体取决于您要执行的操作:

list1 = c("item1", "item2", "item3", "item1", "item8", "item2")
list2 = c("item8", "item9", "item10", "item1")

index <- match(list1,list2) # solve 1
result1 <- list2[na.omit(index)]

index <- match(list2,list1) # solve 2
result2 <- list1[na.omit(index)]

unique(result1) # or unique(result2) to solve 3

每种情况的输出:

4 NA NA  4  1 NA # index
"item1" "item1" "item8" # list2[na.omit(index)]

5 NA NA  1 # index
"item8" "item1" # list1[na.omit(index)]

"item1" "item8" # result1
"item8" "item1" # result2