有一个向量,从大到小排序后,从前往后计算,直到前面的数据之后占总和的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:不明白你的意思。你可以自己做个测试看看哪个快。