2016-10-30 6 views
0

列の最上位の累積量を指定された数まで検索しようとしています。私が持っているのであれば、このデータは指定された数値まで列内の数値の合計を求めます。

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

を設定し、私は、上からの行数が100に合計私はこれのバリエーションを使用してみましたことをしたい:

df %>% top_n(6)

しかし、それはありません作業。これを簡単にやり遂げて行方不明になっている機能はありますか?

これは、group_by関数とdesc関数を実行した後にデータセットに観測値が表示される割合を示す頻度の列があり、すべての観測値の上位15%を求めたい場合です。

ありがとうございます。

+0

'cumsum'をチェックしてください。 –

+1

'df%>%は%(%)>%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 < 100の値にフレーム を狭めて、その結果にnrow計算し、CUMSUM機能を使用することです:

これはそれを行うだろう。

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

関連する問題