1. ホーム
  2. r

[解決済み] R data.tableの計算で前の行の値を使用する

2023-04-15 01:30:13

質問

data.tableに、ある列の現在値と別の列の前値から計算される新しい列を作成したいです。 前の行にアクセスすることは可能ですか?

> DT <- data.table(A=1:5, B=1:5*10, C=1:5*100)
> DT
   A  B   C
1: 1 10 100
2: 2 20 200
3: 3 30 300
4: 4 40 400
5: 5 50 500
> DT[, D := C + BPreviousRow] # What is the correct code here?

正解は

> DT
   A  B   C   D
1: 1 10 100  NA
2: 2 20 200 210
3: 3 30 300 320
4: 4 40 400 430
5: 5 50 500 540

どのように解決するのですか?

とは shift() で実装されている v1.9.6 で実装されたもので、これは非常に簡単です。

DT[ , D := C + shift(B, 1L, type="lag")]
# or equivalently, in this case,
DT[ , D := C + shift(B)]


から ニュース :

<ブロッククオート
  1. 新機能 shift() は、高速な lead/lag ベクトル , リスト , data.frames または データテーブル . これは type 引数は lag" (デフォルト) または "lead" . と共に使用すると非常に便利です。 := または set() . 例えば DT[, (cols) := shift(.SD, 1L), by=id] . をご覧ください。 ?shift をご覧ください。

過去の回答は履歴をご覧ください。