2016-05-18 13 views
1

datatableのfrank関数を使用して日付列をidでランク付けしたいと考えています。しかし、私のランキングはそれに対応するIDではなく、日付列を考慮に入れているように見えます。 =「平均[.data.table(DUPのでは、:=(ランク、率直(DUPの、日付、ties.method:他の変数でグループ化されたrデータテーブル内のランク値

1 ..... 6:私はまた、私はわからないんだけど、これらの警告の6受け取ります「)): RHS 1は破棄される)グループ6のサイズ(1)よりも大きい長さ(10)の最後の9要素(単数または複数である。例えば

dups <- data.table (id = c('11', '11', '11', '22','22', 
    '88', '99','44','44', '55'), 
    date = mdy(c("1-01-2016", "1-02-2016", "1-02-2016","2-01-2016", 
    "2-02-2016"))) 

so.sample <- dups[, rank := frank(dups, date, ties.method = "average"), by = id] 

、ID = 11と日付= 2016-01-01は、1.5の代わりに1を付けなければなりません。その組み合わせのIDと日付は1つのみであるからです。

thx for help

答えて

5

「ランク」と「フランク」の両方でうまく動作します。日付変数が正しくフォーマットされていない可能性があります。ここでは、コードは次のようになります。

dt1 <- data.table (id = c('11', '11', '11', '22','22', 
         '88', '99','44','44', '55'), 
       date = as.Date(c("01-01-2016", 
           "01-02-2016", 
           "01-02-2016", 
           "02-01-2016", 
           "02-02-2016"), 
           format = "%m-%d-%Y")) 
setkey(dt1, date) 
setkey(dt1, id) 
dt1 

    id  date 
1: 11 2016-01-01 
2: 11 2016-01-02 
3: 11 2016-01-02 
4: 22 2016-02-01 
5: 22 2016-02-02 
6: 44 2016-01-02 
7: 44 2016-02-01 
8: 55 2016-02-02 
9: 88 2016-01-01 
10: 99 2016-01-02 

dt1[, rank := frank(date), 
    by = list(id)] 
dt1 

    id  date rank 
1: 11 2016-01-01 1.0 
2: 11 2016-01-02 2.5 
3: 11 2016-01-02 2.5 
4: 22 2016-02-01 1.0 
5: 22 2016-02-02 2.0 
6: 44 2016-01-02 1.0 
7: 44 2016-02-01 2.0 
8: 55 2016-02-02 1.0 
9: 88 2016-01-01 1.0 
10: 99 2016-01-02 1.0 

あなたは自分のレコードを列挙したい場合はさらに、.Nを使用して、非常に参考にすることができ:

dt1[, Visit := 1:.N, 
    by = list(id)] 
dt1 

    id  date rank Visit 
1: 11 2016-01-01 1.0  1 
2: 11 2016-01-02 2.5  2 
3: 11 2016-01-02 2.5  3 
4: 22 2016-02-01 1.0  1 
5: 22 2016-02-02 2.0  2 
6: 44 2016-01-02 1.0  1 
7: 44 2016-02-01 2.0  2 
8: 55 2016-02-02 1.0  1 
9: 88 2016-01-01 1.0  1 
10: 99 2016-01-02 1.0  1 

私はこのことができます願っています。

関連する問題