我有一个矩阵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。
答案 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