根据data.table

时间:2017-05-19 05:27:41

标签: r data.table dcast

我有一个大的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))

2 个答案:

答案 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