gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 19:01:01 25 4
gpt4 key购买 nike

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

可重现的示例:

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 中提取,无需替换)。

Ball Picking: Drawing unsorted, without replacement.

最佳答案

在继续回答之前,我只想澄清您在问题中所说的:

Within the first row of m1 the first value (1) is within +/-1 of any other value in that row hence equals TRUE, and so on.



然而,
>> 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com