r - 找到聚合向量元素的一般方法
问题描述
我有一个正好包含 5 个元素的向量。向量的元素包含大于 100 和小于 100 的数字。这些元素表示空间中某个区域的点数。
我想找到一种将小于 100 的元素与其邻居聚合的一般方法。
规则如下:
我只能加入邻居(2 是 1 的邻居,3 和 1 是 2 的邻居,4 是 5 的唯一邻居......)。
我不能聚合超过 3 个元素。因此,例如,如果向量的元素 1、2、3、4 都小于 100,我只能在它们之间聚合 1、2、3 或 2、3、4(而不是 5,因为这又会更多大于 3)。
如果要聚合的元素是 1、2、4,我可以做的是将 1 和 2 与 3 聚合,将 5 与 4 聚合。
我正在尝试编写一个通用函数来执行此操作,但目前我所做的是生成所有可能的组合并告诉 R 在每种情况下要做什么(就像我在上面所做的那样),这既冗长又乏味。
例如:
v = c(100, 30, 50, 100, 20)
所以在这种情况下,我的结果是:
v1 = c(130, 170)
来自聚合元素 (1+2, 3+4+5)。
一般来说,聚合方法可能不止一种,具体取决于每一侧的邻居。
关于如何巧妙地写出来的任何创意?
解决方案
不是很优雅,但我认为它会起作用:
v = c(100, 30, 50, 100, 20)
v2 <- v
which_ <- which(v == 100)
v2[which_] <- seq(sum(v==100))
v2[which_-1] <- seq(sum(v==100))[which_-1 != 0]
v2[(which_+1)[which_+1 <= length(v2)]] <- seq(sum(v==100))[which_+1 <= length(v)]
aggregate(v,list(v2),sum)$x
# [1] 130 170
推荐阅读
- ansible - Agentinstallation.sh 需要由 user12 运行。对于 user12 密码是 user12 如何传递这个密码来执行下面的脚本
- ffmpeg - 如何从ffmpeg释放资源
- python - 如何在 djangocms 上启动项目?
- reactjs - react服务端渲染babel配置
- c - 从 C 中的文件读取时,最后一个对象重复两次
- google-app-engine - Google API PHP CLIENT > 10000 个文件,无法上传到 APP ENGINE 服务
- keras - 对 GAN 使用自定义数据集而不是 MNIST
- reactjs - setState 不能通过 useState 中的 onChange 工作
- c# - 使用 DesignInstance 将数据上下文绑定到视图
- django - 如何刷新 Django 服务器(在线)