首页 > 解决方案 > data.table:索引子集

问题描述

在下面的数据表中,我想从列中选择具有唯一id值和最小值的行pos2

dt = data.table(id = c(1,2,2,3,3,3),
            pos1 = c(0.1, 0.2, 0.2, 0.3, 0.3, 0.3),
            pos2 = c(0.1, 0.25, 0.21, 0.34, 0.31, 0.32))

   id pos1 pos2
1:  1  0.1 0.10
2:  2  0.2 0.25
3:  2  0.2 0.21
4:  3  0.3 0.34
5:  3  0.3 0.31
6:  3  0.3 0.32

我现在这样做的方式是创建一个中间表:

dt.red = dt[, .(pos2 = first(sort(pos2))), by = id]

   id pos2
1:  1 0.10
2:  2 0.21
3:  3 0.31

然后我合并以获得所需的最终结果

merge(dt, dt.red)

   id pos2 pos1
1:  1 0.10  0.1
2:  2 0.21  0.2
3:  3 0.31  0.3

有没有一种更简洁的方法可以通过 data.table 实现这一目标?

标签: rdata.table

解决方案


也可以在没有 的情况下执行此操作.I,但会更慢*

dt[order(pos2), head(.SD, 1), id]
#    id pos1 pos2
# 1:  1  0.1 0.10
# 2:  2  0.2 0.21
# 3:  3  0.3 0.31

*或者可能不是,请参阅下面的评论


推荐阅读