说我的数据表看起来像这样:
> 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 范围内的值。
* 举个例子,我知道这是不合适的。
一种选择是:
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
根据@jazzurro 的评论between()
更方便。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句