我想对每次值在矩阵行中的给定范围内进行总计,然后将这些逻辑结果求和以得出每一行的“一致性度量”。
可重现的示例:
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中得出,无需替换)。
最佳答案
在继续回答之前,我只想澄清一下,在您的问题中您已经说过:
然而,
>> 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/