检查一个向量是否是R中另一个向量的超集

没有

我有以下向量列表:

a <- c(1,2,4,5,6,7,8,9)
b <- c(1,2,4,5)
c <- c(1,2,3,10,11,12,13,14)
d <- c(1,2,3,10,15,16,17,18,19)
e <- c(1,2,3,10,15,16)
f <- list(a,b,c,d,e)

现在,我可以做这样的事情

is_subset <- vector()
for(i in 1:length(f)) {
  is_subset <- c(is_subset, all(unlist(f[i]) %in% unlist(f[-i])))
}
f[!is_subset]

并从原始列表中获取一个列表,其中包含每个向量,该向量不是任何其他向量的子集:

[[1]]
[1] 1 2 4 5 6 7 8 9

[[2]]
[1]  1  2  3 10 11 12 13 14

[[3]]
[1]  1  2  3 10 15 16 17 18 19

但是,我真正想要的是对列表进行子集处理,以使其仅包括那些不是列表中其他向量的超集的向量,即所需的输出应如下所示:

[[1]]
[1] 1 2 4 5

[[2]]
[1]  1  2  3 10 11 12 13 14

[[3]]
[1]  1  2  3 10 15 16

如何在R中做到这一点?

蒂姆·比格莱森(Tim Biegeleisen)

在下面的代码段中,我使用来将列表中的每个向量与其他所有向量进行比较%in%如果每个比较向量的总和不止一次出现非零,则该向量是另一个向量的超集。注意,我们期望单个比较完全匹配,即向量与自身的比较。

out <- sapply(f, function(x) {
    res <- lapply(f, function(y) {
        return(sum(!(y %in% x)))
    })
    return(sum(res > 0) == length(res) - 1)
})

f[out]
[[1]]
[1] 1 2 4 5

[[2]]
[1]  1  2  3 10 11 12 13 14

[[3]]
[1]  1  2  3 10 15 16

演示版

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

检查向量是否包含另一个向量

检查一个向量是否包含另一个向量的子串

如何检查确切的向量是否是列表中另一个向量的子集

确定是否在另一个向量中找到R中向量的任何值

如何从R中的另一个向量中减去一个向量

检查另一个向量中是否存在元素并打印其值

如何检查一个向量是否等于另一个包含NaN和inf的向量?

如何检查一个向量是否是另一个向量的子序列(顺序相同但不连续)?

检查列中的值是否为另一个数组的超集

检查向量中的每个数字是否在R中另一个向量中的一些数字之间

检查一个向量中的值是否小于另一个向量(具有不同长度)中的值,并用Y / N答案填充表格

测试一个向量是否是另一个向量的排列的最高效方法

测试向量是否包含在另一个向量中,包括重复

r:根据另一个向量中的双重出现随机分配一个向量中的“1”或“2”

根据R中另一个向量中定义的数字位置查找向量的元素

用R中另一个命名向量的值替换命名向量中的值

C++ 检查存储在向量列表中的变量是否包含另一个列表的另一个变量的字符

根据另一个向量中的元素过滤/复制一个向量

计算一个向量值在另一个向量中的出现

来自一个向量的元素在具有R的另一个向量中的位置

如果元素在 R 中是非 NA,则通过另一个向量条件更新向量

使用返回子集向量值来子集R中的另一个向量

将向量的最大值保留到R中的另一个向量

在向量中找到小于R中另一个向量的值的最大元素

用R中的另一个向量替换模式向量

如何对向量进行重新排序,使其与R中另一个向量的顺序匹配?

使用R中另一个向量的索引分解向量

从另一个分配一个向量

Rust是否包含一种直接检查一个向量是否是另一个向量的“子字符串”的方法?