2017-05-27 4 views
0

ことで、このように私のデータテーブルを見て言ってやるがいい。、グループ

> data=data.table(id=c('1','1','1','1','1','2','2','2','2','2'),value=c(10,20,30,60,80,20,40,55, 90, 100)) 
> data 
    id value 
1: 1 10 
2: 1 20 
3: 1 30 
4: 1 60 
5: 1 80 
6: 2 20 
7: 2 40 
8: 2 55 
9: 2 90 
10: 2 100 

私は指定された範囲で、idで、このテーブルのサブセットたいです。私は最初の行を選択したい場所

data.subset<- data[, .SD[c(1,1+60)], by="id"] 

、プラス最初の行の値と60の合計は、最初の行の値は、各IDごとに異なるです:つまり、私はこの*のような何かをしたいと思います。

私は最初の行とN番目の行でこれを行う方法を理解しています。しかし、私はいくつかの静的な値(この場合は60)に対してこれをどうやって行うのか分かりません。

マイ所望の出力である:ID = 1について

> data.subset 
    id value 
1: 1 10 
2: 1 20 
3: 1 30 
4: 1 60 
6: 2 20 
7: 2 40 
8: 2 55 

:10 + 60 = 70、10の範囲内でこのように、選択値 - ID = 2については70

:20 + 60 =したがって、20〜80の範囲で値を選択してください。

*例として、これは適切ではないことがわかります。

答えて

1

1つのオプションは、次のようになります。between()がより便利である@ jazzurroさんのコメントパー

data[, .SD[between(value, value[1], value[1] + 60, incbounds=T)], by="id"] 

# id value 
#1: 1 10 
#2: 1 20 
#3: 1 30 
#4: 1 60 
#5: 2 20 
#6: 2 40 
#7: 2 55 

+0

'between()'も使用できます。 'data [、.SD [値、値[1]、60、インバウンド= TRUEの間]]、by = id]' – jazzurro