根据 data.table 中第三列的条件,按第二列的值对列进行分组
group a column by values of second column based on condition from third column in data.table
我有一个很大的 data.table,我想根据满足第三列条件的另一列的值对其中的一列进行分组。我可以用循环来做到这一点,但我想知道它是否可以在 data.table?
中完成
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))
按 'Group' 分组后,取 'Col2' 与 0.5 的绝对差值,得到最小值 (which.min
) 的索引,并用它对 [=16] 进行子集化=]
DAT[, .(Col1 = Col1[which.min(abs(Col2 - 0.5))]), Group]
# Group Col1
#1: A 4
#2: B 8
What I need is for each Group get the value in the row of Col1 where Col2 is the closest to 0.5.
使用滚动连接:
DAT[.(unique(Group), .5), on=.(Group, Col2), roll="nearest"]
# Group Col1 Col2
# 1: A 4 0.5
# 2: B 8 0.5
我有一个很大的 data.table,我想根据满足第三列条件的另一列的值对其中的一列进行分组。我可以用循环来做到这一点,但我想知道它是否可以在 data.table?
中完成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))
按 'Group' 分组后,取 'Col2' 与 0.5 的绝对差值,得到最小值 (which.min
) 的索引,并用它对 [=16] 进行子集化=]
DAT[, .(Col1 = Col1[which.min(abs(Col2 - 0.5))]), Group]
# Group Col1
#1: A 4
#2: B 8
What I need is for each Group get the value in the row of Col1 where Col2 is the closest to 0.5.
使用滚动连接:
DAT[.(unique(Group), .5), on=.(Group, Col2), roll="nearest"]
# Group Col1 Col2
# 1: A 4 0.5
# 2: B 8 0.5