我有一个矩阵,我正在执行for循环。我想知道for循环中位置i的值是否存在于矩阵中的任何其他位置,如果是,则报告为TRUE。矩阵看起来像这样
dim
x y
[1,] 5 1
[2,] 2 2
[3,] 5 1
[4,] 5 9
在这种情况下,dim [1,]与dim [3,]相同,因此如果我在for循环中处于位置i = 1,则应报告为TRUE。我可以编写另一个for循环来处理这个问题,但我确信有更聪明的,可能是矢量化的方法来做到这一点。
答案 0 :(得分:4)
我们可以使用duplicated
duplicated(m1)|duplicated(m1, fromLast=TRUE)
#[1] TRUE FALSE TRUE FALSE
duplicated(m1)
给出了一个'TRUE / FALSE'值的逻辑向量。如果有重复的行,则为TRUE
duplicated(m1)
#[1] FALSE FALSE TRUE FALSE
在这种情况下,第三行是第一行的副本。假设我们需要第一行和第三行,我们可以从反面进行复制,并使用|
使两个位置都为TRUE。即。
duplicated(m1, fromLast=TRUE)
#[1] TRUE FALSE FALSE FALSE
duplicated(m1)|duplicated(m1, fromLast=TRUE)
#[1] TRUE FALSE TRUE FALSE
根据?duplicated
,输入数据可以是
x:向量或数据框或数组或'NULL'。
m1 <- cbind(x=c(5,2,5,5), y=c(1,2,1,9))