我正在尝试计算一个数组中所有可能的对的差值之和(差值第一/第二+差值第一/第三,差值第二/第一+差值第二/第三,差值第三/第一+差值第三/第二)。原始数据帧由多个列组成,如下所示,colSum函数仍然无法工作,原因如下:
“colSums(FC_TS1test1,dims = 1)中出错:'x‘必须是至少二维的数组”。
非常感谢您的帮助!
array <- c(5, 3, 1)它背后的计算应该是:
|(5-3)|+|(5-1)|=2+4=6
|(3-5)|+|(3-1)|=2+2=4
|(1-5)|+|(1-3)|=4+2=6
6+4+6=16发布于 2021-09-28 14:08:55
我们需要没有重复的组合。
sum(combn(a, 2, diff))
# [1] -94或者,使用一些包:
colSums(matrixStats::rowDiffs(RcppAlgos::comboGeneral(a, 2, repetition=F)))
# [1] -94或
sum(unlist(RcppAlgos::comboGeneral(a, 2, repetition=F, FUN=diff)))
# [1] -94两个较小的示例演示了代码的核心功能。
combn(b, 2)
# [,1] [,2] [,3] [,4] [,5] [,6]
# [1,] 3 3 3 4 4 2
# [2,] 4 2 5 2 5 5
RcppAlgos::comboGeneral(b, 2, repetition=F)
# [,1] [,2]
# [1,] 3 4
# [2,] 3 2
# [3,] 3 5
# [4,] 4 2
# [5,] 4 5
# [6,] 2 5编辑
根据您最近的编辑,对于absolute differences,我们可以定义一个匿名函数:
sum(combn(a, 2, function(x) abs(diff(x))))
# [1] 840数据:
a <- c(3, 4, 2, 5, 4, 4, 1, 5, 5, 4, 1, 4, 7, 2, 1, 3, 5, 2, 4, 2,
7, 4, 4, 1, 4, 3, 4, 4, 2, 4, 1)
b <- c(3, 4, 2, 5)发布于 2021-09-28 14:24:20
我们可以使用sum + dist
> sum(dist(array))
[1] 840https://stackoverflow.com/questions/69362999
复制相似问题