【问题标题】:reporting identical values across columns in matrix报告矩阵中各列的相同值
【发布时间】:2015-11-03 06:40:16
【问题描述】:

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

【问题讨论】:

    标签: r for-loop matrix


    【解决方案1】:

    我们可以使用duplicated

    duplicated(m1)|duplicated(m1, fromLast=TRUE)
    #[1]  TRUE FALSE  TRUE FALSE
    

    duplicated(m1) 给出了一个“真/假”值的逻辑向量。如果有重复行,则为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))
    

    【讨论】:

      最近更新 更多