首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组中所有可能对的绝对差值之和

数组中所有可能对的绝对差值之和
EN

Stack Overflow用户
提问于 2021-09-28 13:49:33
回答 2查看 86关注 0票数 2

我正在尝试计算一个数组中所有可能的对的差值之和(差值第一/第二+差值第一/第三,差值第二/第一+差值第二/第三,差值第三/第一+差值第三/第二)。原始数据帧由多个列组成,如下所示,colSum函数仍然无法工作,原因如下:

“colSums(FC_TS1test1,dims = 1)中出错:'x‘必须是至少二维的数组”。

非常感谢您的帮助!

代码语言:javascript
复制
array <- c(5, 3, 1)

它背后的计算应该是:

代码语言:javascript
复制
|(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
EN

回答 2

Stack Overflow用户

发布于 2021-09-28 14:08:55

我们需要没有重复的组合。

代码语言:javascript
复制
sum(combn(a, 2, diff))
# [1] -94

或者,使用一些包:

代码语言:javascript
复制
colSums(matrixStats::rowDiffs(RcppAlgos::comboGeneral(a, 2, repetition=F)))
# [1] -94

代码语言:javascript
复制
sum(unlist(RcppAlgos::comboGeneral(a, 2, repetition=F, FUN=diff)))
# [1] -94

两个较小的示例演示了代码的核心功能。

代码语言:javascript
复制
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,我们可以定义一个匿名函数:

代码语言:javascript
复制
sum(combn(a, 2, function(x) abs(diff(x))))
# [1] 840

数据:

代码语言:javascript
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2021-09-28 14:24:20

我们可以使用sum + dist

代码语言:javascript
复制
> sum(dist(array))
[1] 840
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69362999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档