说我的数据表看起来像这样:
> 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的值。
*例如,我知道这不合适。
答案 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()
更方便。