在矩阵的行上限范围内计算N次出现次数

dan*_*T_W 5 r count matrix plyr ceil

我想计算每次值在矩阵的行中给定范围内,然后将这些逻辑结果相加以得出每行的"一致性度量".

可重复的例子:

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)
Run Code Online (Sandbox Code Playgroud)

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

在第m1一个值(1)的第一行内,该行中任何其他值的+/- 1都在等于TRUE,等等.

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

任何指针都会非常感激吗?

更新:

由于提供的帮助,我现在可以计算满足任意大矩阵的上限标准的唯一值对(使用二项式系数,k从n中抽取,无需替换).

球采摘:未分类绘制,无需更换.

Kon*_*rad 3

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

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

然而,

>> m1[1,4]
[1] 6
Run Code Online (Sandbox Code Playgroud)

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)
            }
        )
    }
))
Run Code Online (Sandbox Code Playgroud)

结果

      [,1]  [,2]  [,3]  [,4]
[1,]  TRUE  TRUE  TRUE FALSE
[2,]  TRUE FALSE  TRUE  TRUE
[3,] FALSE FALSE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)

查看

对于存储为res.

>> identical(res, exp.outcome)
[1] TRUE
Run Code Online (Sandbox Code Playgroud)