【发布时间】:2018-11-20 16:55:43
【问题描述】:
在 R 中,我有一个整数向量。从这个向量中,我想随机减少每个整数元素的值,以获得向量的总和,即初始总和的百分比。
在这个例子中,我想将向量“x”归约为向量“y”,其中每个元素都被随机归约以获得等于初始总和 50% 的元素总和。
生成的向量应具有非负值且低于原始值。
set.seed(1)
perc<-50
x<-sample(1:5,10,replace=TRUE)
xsum<-sum(x) # sum is 33
toremove<-floor(xsum*perc*0.01)
x # 2 2 3 5 2 5 5 4 4 1
y<-magicfunction(x,perc)
y # 0 2 1 4 0 3 2 1 2 1
sum(y) # sum is 16 (rounded half of 33)
你能想出办法吗?谢谢!
【问题讨论】:
-
也许我很困惑,但我不太明白为什么根据你的描述你不能只做
0.5 * x?还有其他一些您没有提到的标准吗? -
我们可以假设向量很长吗?至少有 200 个元素?
-
@JuliusVainora 是的,向量可以任意长
-
@joran 对不起,我澄清了:向量缩减不应该与每个元素成正比,而是随机的
-
我是否正确地假设您希望避免计算效率低下的解决方案,例如,对随机整数进行采样,直到它们的总和为 sum(x)/2,然后反复从 x 中随机减去它们,直到得到一个没有负值的向量?
标签: r