R语言 根据列值为整数值分配特定的和

rseugnpd  于 2023-01-15  发布在  其他
关注(0)|答案(1)|浏览(120)

我正在将陷阱分配到害虫有一定建立风险的位置。我已经计算了每个地点的建立风险。我希望找到一种有效和安全的方法来将一定数量的陷阱分配到这些地点(例如,总共10个站点)。这意味着我必须将风险值乘以某个值,直到所有整数之和就是我要查找的值(例如10个)。
在R中有办法做到这一点吗?
示例:

example <- NULL
example$site <- c("a", "b", "c", "d")
example$est_risk <- c(0.001,0.05,0.07,0.1)
example <- as.data.frame(example)

给予

我想找个方便的方法

我有更多的网站,也将需要做各种害虫,所以这样做是手动繁琐和容易出错。谢谢你的帮助。

wh6knrhe

wh6knrhe1#

该解决方案从分配0个陷阱开始,然后将它们一次一个地添加到站点,使得在每次添加之后陷阱分布和风险分布之间的欧几里得距离最小化。

trapsDistribtion <- function(risk, N){
x <- rep(0,length(risk))
for(i in 1:N){
j = which.min(sapply(seq_along(risk), \(i) {
  y = x
  y[i] = y[i]+1
  sum(((risk/sum(risk)) - (y/sum(y)))^2)
  }))
x[j] <- x[j]+1
}
 
x
}


> trapsDistribtion(c(0.001,0.05,0.07,0.1),10)
[1] 0 2 3 5

相关问题