找到列中的数字总和直到指定的数字

时间:2016-10-30 19:58:26

标签: r group-by dplyr percentage

我正在尝试查找列的最高累计行数,直到指定的数字。所以,如果我有这个数据集

df <- data.frame(x = rnorm(26, 10, 2))

我希望从顶部总和的行数达到100.我尝试使用此变体:

df %>% top_n(6)

但这不起作用。是否有一个可以轻松完成这项功能的功能,我不知道?

这个用例就是如果我有一个频率列,它给出了观察在执行group_by和desc函数后出现在数据集中的百分比,然后我想要所有观察结果的顶部,比如说15%。

提前致谢。

2 个答案:

答案 0 :(得分:0)

诀窍是使用cumsum函数,然后缩小框架 对于cumsum的值&lt; 100并计算结果:

这样做:

df <- data.frame(x = rnorm(26, 10, 2))
df$accum <- cumsum(df$x)
df
nrow(df[df$accum<100,])

结果:

          x     accum
1  10.045870  10.04587
2   6.626029  16.67190
3   9.585552  26.25745
4   3.311654  29.56911
5  12.247780  41.81689
6   7.973587  49.79047
7  12.194685  61.98516
8  12.415279  74.40044
9   8.617609  83.01805
10 10.339062  93.35711
11 11.976633 105.33374
12  7.301745 112.63549
13  9.247254 121.88274
14  5.697414 127.58015
15  9.721602 137.30176
16 12.371765 149.67352
17 10.231773 159.90529
18 10.474578 170.37987
19 13.562808 183.94268
20  7.419556 191.36224
21  7.613043 198.97528
22  9.416050 208.39133
23 10.047952 218.43928
24  9.788021 228.22730
25 10.709967 238.93727
26  8.766313 247.70358

10

答案 1 :(得分:0)

您可以使用cumsum执行此操作:

sum(cumsum(df$x)<100)
#[1] 10

或使用Reduce

sum(Reduce('+', df$x, accumulate = T)<100)
#[1] 10

数据

set.seed(100)
df <- data.frame(x = rnorm(26, 10, 2))