• R语言
  • 有一个向量,从大到小排序后,从前往后计算,直到前面的数据之后占总和的90%,则提取前面的这些数据

有一个向量,从大到小排序后,从前往后计算,直到前面的数据之后占总和的90%,则提取前面的这些数据,有什么函数可以快速实现呢?

这个意思?方法比较笨,不过能实现

<br />
x <- seq(2, 100, 2)<br />
y <- sort(x, decreasing = T)<br />
y[1:(length(which(cumsum(y)/sum(y) < 0.9)) + 1)]<br />
#  [1] 100  98  96  94  92  90  88  86  84  82  80  78  76  74  72  70  68  66  64  62  60  58<br />
# [23]  56  54  52  50  48  46  44  42  40  38  36  34  32<br />
</p>

回复 第2楼 的 iamstomach:

谢了,这个方法蛮好的。我主要是cumsum这个函数没想到。再次拜谢!

按从小到大排列,算10%要比直接算90%快很多

回复 第4楼 的 Feng Li:哈哈,确实

回复 第4楼 的 Feng Li:如果用cumsum的话应该没什么差别。

回复 第6楼 的 suckbunny:应该是有区别的。我手头的数据是小数据多,大数据少,所以如果从提高计算速度的角度来讲,应该是从大到小排更为有利。

回复 第7楼 的 daigazi:不明白你的意思。你可以自己做个测试看看哪个快。