我想对每次值在矩阵行中的给定范围内进行总计,然后将这些逻辑结果求和以得出每一行的“一致性度量”。

可重现的示例:

m1 <- matrix(c(1,2,1,6,3,7,4,2,6,8,11,15), ncol=4, byrow = TRUE)


# expected outcome, given a range of +/-1 either side

exp.outcome<-matrix(c(TRUE,TRUE,TRUE,FALSE,
                          TRUE,FALSE,TRUE,TRUE,
                          FALSE,FALSE,FALSE,FALSE),
                          ncol=4, byrow=TRUE)

上面我已经指出了预期的结果,在这种情况下,每个值都位于该行中任何其他值的+/- 1范围内。

m1的第一行中,第一个值(1)在该行中任何其他值的+/- 1之内,因此等于TRUE,依此类推。

相反,m1的第4行中的任何值都不在彼此的单个数字值之内,因此,每个值都被分配了FALSE

任何指针将不胜感激?

更新:

多亏了所提供的帮助,我现在可以为任何任意大矩阵计算出满足上限条件的唯一值对(使用二项式系数,k从n中得出,无需替换)。

r - 按矩阵计算在上限范围内的N次出现-LMLPHP

最佳答案

在继续回答之前,我只想澄清一下,在您的问题中您已经说过:



然而,

>> m1[1,4]
[1] 6

6不在1的+/- 1范围内,并且您的答案中包含FALSE值作为正确结果。

解决方案

此解决方案应使您获得所需的结果:
t(apply(
    X = m1,
    # Take each row from the matrix
    MARGIN = 1,
    FUN = function(x) {
        sapply(
            X = x,
            # Now go through each element of that row
            FUN = function(y) {
                # Your conditions
                y %in% c(x - 1) | y %in% c(x + 1)
            }
        )
    }
))

结果
      [,1]  [,2]  [,3]  [,4]
[1,]  TRUE  TRUE  TRUE FALSE
[2,]  TRUE FALSE  TRUE  TRUE
[3,] FALSE FALSE FALSE FALSE

查看

对于存储为res的结果。
>> identical(res, exp.outcome)
[1] TRUE

关于r - 按矩阵计算在上限范围内的N次出现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37862714/

10-12 23:35