gpt4 book ai didi

r - 比较多个向量

转载 作者:行者123 更新时间:2023-12-02 01:36:14 25 4
gpt4 key购买 nike

假设您有任意数量的向量。现在您想比较哪些元素在哪些向量之间同时出现。对于少量向量,这很容易“手动”完成,例如:

a <- c("a", "b", "c")
b <- c("d", "e", "f")
c <- c("g", "h", "i")

a %in% b
a %in% c
b %in% c

但是,随着向量数量的增加,这很快就会变得笨拙。对于这些类型的比较,是否有一些巧妙且可推广的解决方案?

最佳答案

首先将所有向量放在一个列表中,这将使它们更易于使用。我想您随后只想知道每个向量的每个元素是否出现在任何其他向量中。您可以通过将每个向量与列表中的所有其他向量进行简单的留一法比较来做到这一点:

x <- list(a, b, c)
lapply(seq_along(x), function(n) x[[n]] %in% unlist(x[-n]))
# [[1]]
# [1] FALSE FALSE FALSE
#
# [[2]]
# [1] FALSE FALSE FALSE
#
# [[3]]
# [1] FALSE FALSE FALSE

在上述结构中,每个向量都与所有其他向量(组合)中的所有其他值进行比较。因此,第一个列表元素是一个三元素向量,指示 a 的每个元素是否在 bc 中的任何位置找到,等等。

如果您需要对向量进行每对比较,您可以这样做:

apply(combn(seq_along(x), 2), 2, function(n) x[[n[1]]] %in% x[[n[2]]])
# [,1] [,2] [,3]
# [1,] FALSE FALSE FALSE
# [2,] FALSE FALSE FALSE
# [3,] FALSE FALSE FALSE

在此结构中,每一列都与combn(seq_along(x), 2)给出的向量的比较相关:

     [,1] [,2] [,3]
[1,] 1 1 2
[2,] 2 3 3

所以第一列表示是否在b中找到了a的每个元素,第二列表示是否找到了a的每个元素在 c 等中

关于r - 比较多个向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31134217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com