データは、データテーブルdt
またはデータフレームdf
として保存され、id
- month
の組み合わせごとに複数の観測値があります。行番号を変数に格納したい場合は、row
としましょう。グループごとに行番号を格納する方法
私はdplyrでこれを行う方法を知っていますが、(純粋な)data.tableでそれを行う方法を学びたいと思います。わかりやすい操作だと思いますが、うまくいくソリューションを見つけることができません。
Reprex:別のdata.table利回りの何かに同様の操作を行う
df %>%
group_by(id, month) %>%
mutate(row = row_number(id))
# A tibble: 6 x 3
# Groups: id, month [4]
id month row
<dbl> <dbl> <int>
1 1 1 1
2 1 1 2
3 1 2 1
4 2 1 1
5 2 1 2
6 2 2 1
:
library(dplyr)
library(data.table)
df <- data_frame(id = c(1, 1, 1, 2, 2, 2), month = c(1, 1, 2, 1, 1, 2))
dt <- data.table(df)
マイdplyr液が期待される出力を与える
dt[, row := row_number(id), by = c("id", "month")]
id month row
1: 1 1 1
2: 1 1 1
3: 1 2 1
4: 2 1 1
5: 2 1 1
6: 2 2 1
または:
dt[, row := .I, by = c("id", "month")]
id month row
1: 1 1 1
2: 1 1 2
3: 1 2 3
4: 2 1 4
5: 2 1 5
6: 2 2 6
これはなぜ発生するのですか(row_number(id)
は単に各グループの最初の行の最初の行番号を参照します)。しかし、純粋なdata.tableで期待される結果を得る方法はわかりません。
ちょうど 'DT:後知恵で非常に単純な ' – Sotos
[、行= Cの( "ID"、 "月")によって= SEQ(.N)]。どうもありがとう! –
@Sotos Fyi、 'dt [、v:= rowid(id、month)]' – Frank