1

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

我需要的是为每个组获取 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))
4

2 回答 2

3

按'Group'分组后,取'Col2'与0.5的绝对差,得到索引o最小值(which.min)并用它来子集'Col1'

DAT[, .(Col1 = Col1[which.min(abs(Col2 - 0.5))]), Group]
#   Group Col1
#1:     A    4
#2:     B    8
于 2017-05-19T05:47:41.217 回答
2

我需要的是为每个组获取 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
于 2017-05-19T10:41:18.910 回答