我有一个大的data.table,我希望根据符合第三列条件的另一列的值对一列进行分组。我可以通过循环执行此操作,但我想知道它是否可以在data.table中完成?
表格如下:
Group Col1 Col2
1: A 1 0.0
2: A 2 0.1
3: A 3 0.2
4: A 4 0.5
5: A 5 0.9
6: B 6 0.0
7: B 7 0.2
8: B 8 0.4
9: B 9 0.9
10: B 10 1.0
我需要的是每个Group获取Col1行中的值,其中Col2最接近0.5。 Col2是一个累积值,范围从0到1.预期结果是:
Group Col1
1: A 4
2: B 8
可以在data.table中完成吗?我很难做到这一点,所以任何输入或指导将不胜感激。这是上面的data.table
DAT=data.table(Group=c(rep("A",5),rep("B",5)),Col1=1:10,Col2=c(0,.1,.2,.5,.9,0,.2,.4,.9,1))
答案 0 :(得分:3)
在' Group'分组后,取“Col2'”的绝对差异。使用0.5,得到索引o最小值(DAT[, .(Col1 = Col1[which.min(abs(Col2 - 0.5))]), Group]
# Group Col1
#1: A 4
#2: B 8
)并使用它来对' Col1'
PersonUtility
答案 1 :(得分:2)
我需要的是每个Group获取Col1行中的值,其中Col2最接近0.5。
使用滚动连接:
DAT[.(unique(Group), .5), on=.(Group, Col2), roll="nearest"]
# Group Col1 Col2
# 1: A 4 0.5
# 2: B 8 0.5