【问题标题】:Comparing Vectors Values: 1 element with all other比较向量值:1 个元素与所有其他元素
【发布时间】:2016-03-13 12:58:51
【问题描述】:

我想知道如何将向量的 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

标签: r vector compare


【解决方案1】:

你的意思是这样的吗?

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 所以我然后可以提取。
【解决方案2】:

如果您想比较 x 和 y 的每个元素,通常“应用”函数之一会有所帮助。

如下:

x

y

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

输出中的第 i 列是 x[i]==y 的结果。

这就是你要找的吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    相关资源
    最近更新 更多