r - 数组中所有可能对的绝对差之和
问题描述
我正在尝试计算数组的所有可能对的差异之和(差异之和第一/第二+差异第一/第三,差异第二/第一+差异第二/第三,差异第三/第一+差异第三/第二) . 原始数据框由多个列组成,如下所示,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
解决方案
我们需要没有重复的组合。
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
编辑
对于根据您最近编辑的绝对差异,我们可以定义一个匿名函数:
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)
推荐阅读
- json - 如何调试 JSON 文档无效的原因?
- javascript - 将 window.location.href 从扩展复制到剪贴板
- android - how to place a bitmap image(pin) in center of the canvas circle(blue circle)?
- c - 无法释放键盘 irq 线路:设备或资源忙
- laravel - 将参数从 axios 传递给 laravel
- php - 如果 laravel 不起作用怎么办(错误 'Segmentation fault (core dumped)')
- python - django:将自定义代码集成到 django 项目中
- android - AutocompleteTextView 建议总是选择建议中的第一项
- java - 从 Activity 开始一个片段
- c++ - 当代码尝试在 STL 映射中查找键时,为什么会出现分段错误?