2016-10-30 5 views
0

Я пытаюсь найти верхнюю совокупную сумму строк столбца до указанного числа. Так что, если у меня есть этот набор данныхнайти сумму чисел в столбце до указанного числа

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

, и я хочу, чтобы количество строк из верхней, что суммы до 100. Я пробовал использовать вариации этого:

df %>% top_n(6)

Но это не Работа. Есть ли функция, которая может сделать это легко, что мне не хватает?

В этом случае, если у меня есть частотный столбец, который дает мне процент того, что наблюдение появляется в наборе данных после выполнения функций group_by и desc, а затем я хочу, чтобы верх, скажем, 15% всех наблюдений.

Заранее спасибо.

+0

ЗАКАНЧИВАТЬ 'cumsum'. –

+1

'df%>% arr (desc (x))%>% filter (cumsum (x) <100)'. – tchakravarty

ответ

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)) 
0

Хитрость заключается в том, чтобы использовать функцию 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 
+0

Я бы подумал, что строка 11 была ответом, который он искал. – Bobby

+0

хорошо пункт. В этом случае ему нужно добавить 1 к nrows, так как следующий результат (если он существует) будет ответом. – dmg

 Смежные вопросы

  • Нет связанных вопросов^_^