在矩阵中的列上报告相同的值

时间:2015-08-11 06:48:48

标签: r for-loop matrix

我有一个矩阵,我正在执行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循环来处理这个问题,但我确信有更聪明的,可能是矢量化的方法来做到这一点。

1 个答案:

答案 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))