哪些行与R中的给定向量匹配

时间:2013-11-05 16:28:27

标签: r

我有一个矩阵A,

A = as.matrix(data.frame(col1 = c(1,1,2,3,1,2), col2 = c(-1,-1,-2,-3,-1,-2), col3 = c(2,6,1,3,2,4)))

我有一个向量v,

v = c(-1, 2)

如何获得一个TRUE / FALSE向量来比较矩阵的最后两列,如果最后两列与向量匹配则返回TRUE,如果不匹配则返回false?

即,如果我尝试,

A[,c(2:3)] == v

我获得了,

           col2  col3
[1,]  TRUE FALSE
[2,] FALSE FALSE
[3,] FALSE FALSE
[4,] FALSE FALSE
[5,]  TRUE FALSE
[6,] FALSE FALSE

这不是我想要的,我希望两列与矢量v相同,更像是

result = c(TRUE, FALSE, FALSE, FALSE, TRUE, FALSE)

由于第一行和第五行完全匹配向量v。

4 个答案:

答案 0 :(得分:1)

通过查看R邮件列表,我找到了答案:https://stat.ethz.ch/pipermail/r-help/2010-September/254096.html

check.equal <- function(x, y)
{
  isTRUE(all.equal(y, x, check.attributes=FALSE))
}

result = apply(A[,c(2:3)], 1, check.equal, y=v)

不确定我是否需要定义一个函数并完成所有这些,也许有更简单的方法来实现它。

答案 1 :(得分:1)

这是一个简单的替代方案

> apply(A[, 2:3], 1, function(x) all(x==v))
[1]  TRUE FALSE FALSE FALSE  TRUE FALSE

答案 2 :(得分:1)

这是另一个直截了当的选择:

which(duplicated(rbind(A[, 2:3], v), fromLast=TRUE))
# [1] 1 5

results <- rep(FALSE, nrow(A))
results[which(duplicated(rbind(A[, 2:3], v), fromLast=TRUE))] <- TRUE
results
# [1]  TRUE FALSE FALSE FALSE  TRUE FALSE

或者,作为一行:

duplicated(rbind(A[, 2:3], v), fromLast=TRUE)[-(nrow(A)+1)]
# [1]  TRUE FALSE FALSE FALSE  TRUE FALSE

答案 3 :(得分:0)

脏话:

result <- c()
for(n in 1:nrow(A)){result[n] <-(sum(A[n,-1]==v)==2)}

> result
[1]  TRUE FALSE FALSE FALSE  TRUE FALSE