2

たぶん、誰かが私を正しい方向に向けることができます。この問題の簡単な解決策が見つからないようです

here のように data.table があります。

library(data.table)
dtData <- data.table(DateTime = c(1,2,1,2,3, 1,2,3,4), 
                     Id = c(1,1,2,2,2,3,3,3,3), 
                     LastTrade = as.Date(c('2013-01-01', '2013-01-01', '2013-06-01', 
                                           '2013-06-01', '2013-06-01', '2013-09-01',
                                           '2013-09-01', '2013-09-01', '2013-09-01')))

データをすばやくグループ化したいと思います。だから私は簡単に行うことができます:

dtData[, min(LastTrade), by=DateTime]

それは私に与えます

    DateTime        V1
1:        1 2013-01-01
2:        2 2013-01-01
3:        3 2013-06-01
4:        4 2013-09-01

ここで私の質問: 最小の LastTrade 列を "V1" として返す代わりに、結果として "Id" 列を取得するにはどうすればよいですか?

    DateTime    V1
1:        1      1
2:        2      1
3:        3      2
4:        4      3
4

2 に答える 2

3

を使用which.minして最小値を含む行を識別し、それを使用して列をサブセット化できIdます。

dtData[, Id[which.min(LastTrade)], by=DateTime]
#    DateTime V1
# 1:        1  1
# 2:        2  1
# 3:        3  2
# 4:        4  3
于 2013-08-07T14:07:41.553 に答える