比较向量值:1个元素与所有其他元素的比较

3
我想知道如何将一个向量的1个元素与另一个向量中的所有元素进行比较。例如:假设
x <- c(1:10)  
y <- c(10,11,12,13,14,1,7) 

现在我可以逐个比较元素。
x == y
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

但我想将y的所有元素与x的特定元素进行比较,类似于以下内容:

x[7] == y
[1] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

这可能吗?

你需要%in%吗?x %in% y - jeremycg
2个回答

5
你是指像这样的东西吗?
x <- 1:10
y <- c(10,7,11,12,13,14,15,16,17,18)
res <- outer(x, y, `==`)
colnames(res) <- paste0("y=", y)
rownames(res) <- paste0("x=", x)

这将给您以下矩阵:

      y=10   y=7  y=11  y=12  y=13  y=14  y=15  y=16  y=17  y=18
x=1  FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
x=2  FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
x=3  FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
x=4  FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
x=5  FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
x=6  FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
x=7  FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
x=8  FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
x=9  FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
x=10  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

如果您希望维度名称像 y[1] 这样,可以使用以下代码:
colnames(res) <- paste0("y[", seq_along(y), "]")
rownames(res) <- paste0("x[", seq_along(x), "]")

这将给您:

       y[1]  y[2]  y[3]  y[4]  y[5]  y[6]  y[7]  y[8]  y[9] y[10]
x[1]  FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
x[2]  FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
x[3]  FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
x[4]  FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
x[5]  FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
x[6]  FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
x[7]  FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
x[8]  FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
x[9]  FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
x[10]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

要获取索引,请使用以下方式中的which:
which(res) 
[1] 10 17

R 以行为单位保存矩阵,因此结果为 10 和 17。 如果您想要 x 和 y 分量的索引,请使用:

which(res, arr.ind = TRUE)
     row col
x=10  10   1
x=7    7   2

明白了,但我正在处理更多的元素,比如200个,我该如何找到向量y中所有TRUE值的位置,例如,y[1]和y[2]都是TRUE,所以我可以提取它们。 - AnesG

1
如果您想将x的每个元素与y进行比较,通常一个'apply'函数会有所帮助。
如下所示:

x <- c(1:10)

y <- c(10,11,12,13,14,1,7)

sapply(x,function(z){z==y})

输出中的第i列是x[i]==y的结果。
这是您要找的吗?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接