2017-08-19 4 views
0

私はRを初めて利用しており、特にfunctionをプログラミングしています。そのため、理解していただければ幸いです。値のsumならば、R:特定の列の値の合計を行い、特定の基準を満たしたときに行番号を報告する関数を作成するにはどうすればよいですか?

の1- add特定variable(列)line by line (row by row)
2-値:私は、次の行為を行うためのfunctionを書くことができる方法を知りたい

100より大きい。 >100
3、stopそして、(総額< 100)の基準を満たすまで、すべての行が懇願すると報告しますか?

DT <- data.table(ID = c(1:21),Var1 = LETTERS[1:21], Var2 = seq(9, 19, .5)) 
> DT 
    ID Var1 Var2 
1: 1 A 9.0 
2: 2 B 9.5 
3: 3 C 10.0 
4: 4 D 10.5 
5: 5 E 11.0 
6: 6 F 11.5 
7: 7 G 12.0 
8: 8 H 12.5 
9: 9 I 13.0 
10: 10 J 13.5 
11: 11 K 14.0 
12: 12 L 14.5 
13: 13 M 15.0 
14: 14 N 15.5 
15: 15 O 16.0 
16: 16 P 16.5 
17: 17 Q 17.0 
18: 18 R 17.5 
19: 19 S 18.0 
20: 20 T 18.5 
21: 21 U 19.0 
    ID Var1 Var2 

私は> 100それが停止になると、それはこれを満たすまで、最初からすべての行を報告するにtotal sumまで行によってVar2行の値のすべてをaddが欲しい:例として

基準。

I I意味この場合
は、それが合計99されるであろうID1:9 (9.0 +9.5+10+10.5+11+11.5+12+12.5+13)からVar2の値の全てを加算し、次の行(13.5)を追加した場合の値は、112.5となるであろう。

ので、予想される出力は次のようになります。

ID Var1 Var2 
1: 1 A 9.0 
2: 2 B 9.5 
3: 3 C 10.0 
4: 4 D 10.5 
5: 5 E 11.0 
6: 6 F 11.5 
7: 7 G 12.0 
8: 8 H 12.5 
9: 9 I 13.0 

私は別のものを試してみましたが、私には、彼らは全く役に立ちませんでした、それゆえ、私はここでそれらを含めておりません。

答えて

2

私が理解すれば、それは複雑に見えません。 In base R,

DT[cumsum(DT$Var2) < 100, ] 

これは以下のように実行できます。上記の2つのコードを分かりやすくするために、2つのコードを分けました。 6ヶ月かそこらでそれは支払うでしょう。

keep_below <- function(x, column = "Var2", threshold = 100){ 
    inx <- cumsum(x[[column]]) < threshold 
    x[inx, ] 
} 

keep_below(DT) 
+0

ありがとうございました。 'cumsum'は私が知らなかったものでした。もしあなたが可能であれば私にもお聞きしたいのですが、 'cumsum'にかかわらず、' function 'を書いてどうすればいいのか教えてください。 – Daniel

+1

@Daniel Ok、そうです、あなたの質問。私はそれを試し、私の答えを編集します。ちょっとまってください。 –

関連する問題