查找一列中的数字总和,直到指定数字
find sum of numbers in a column up till a specified number
我正在尝试查找不超过指定数量的列的最高累积行数。所以如果我有这个数据集
df <- data.frame(x = rnorm(26, 10, 2))
并且我想要从顶部算起的行数总和为 100。我已经尝试使用以下变体:
df %>% top_n(6)
但这不起作用。有没有我缺少的可以轻松做到这一点的功能?
这个用例是,如果我有一个频率列,它给出了在执行 group_by 和 desc 函数后观察值出现在数据集中的百分比,然后我想要顶部,比如 15%,所有观察结果。
提前致谢。
技巧是使用cumsum函数,然后缩小框架
到 cumsum < 100 的值并根据该结果计算 nrow:
这样做就可以了:
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
您可以使用 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))
我正在尝试查找不超过指定数量的列的最高累积行数。所以如果我有这个数据集
df <- data.frame(x = rnorm(26, 10, 2))
并且我想要从顶部算起的行数总和为 100。我已经尝试使用以下变体:
df %>% top_n(6)
但这不起作用。有没有我缺少的可以轻松做到这一点的功能?
这个用例是,如果我有一个频率列,它给出了在执行 group_by 和 desc 函数后观察值出现在数据集中的百分比,然后我想要顶部,比如 15%,所有观察结果。
提前致谢。
技巧是使用cumsum函数,然后缩小框架 到 cumsum < 100 的值并根据该结果计算 nrow:
这样做就可以了:
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
您可以使用 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))