如何基于(第一行+ X的值)按组子集数据表

时间:2017-05-27 00:51:42

标签: r data.table

说我的数据表看起来像这样:

> 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)执行此操作。

我想要的输出是:

> 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

对于id = 1:10 + 60 = 70,因此选择范围为10 - 70的值。

对于id = 2:20 + 60 = 80,因此选择范围为20 - 80的值。

*例如,我知道这不合适。

1 个答案:

答案 0 :(得分:1)

一种选择是:

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

Per @jazzurro的评论between()更方便。