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中抽取,无需替换).
在继续回答之前,我只想澄清一下,在你的问题中你已经说过:
在第一行中,
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)
| 归档时间: |
|
| 查看次数: |
730 次 |
| 最近记录: |