私のデータ
DT
現在 ( F0YR
) と次 ( F1YR
) の会計年度末 (FYE) が整数としてエンコードされた data.table があります。すべての次の FYE は最終的に現在の FYE になるため、整数は列F1YR
との両方になりますF0YR
。また、私のデータには毎月の観測が含まれているため、同じ FYE がデータセットに複数回含まれます。
library(data.table)
DT <- data.table(ID = rep(c("A", "B"), each=9),
MONTH = rep(100L:108L, times=2),
F0YR = rep(c(1L, 4L, 7L), each=3, times=2),
F1YR = rep(c(4L, 7L, 9L), each=3, times=2),
value = c(rep(1:5, each=3), 6, 6, 7),
key = "ID,F0YR")
DT
ID MONTH F0YR F1YR value
[1,] A 100 1 4 1
[2,] A 101 1 4 1
[3,] A 102 1 4 1
[4,] A 103 4 7 2
[5,] A 104 4 7 2
[6,] A 105 4 7 2
[7,] A 106 7 9 3
[8,] A 107 7 9 3
[9,] A 108 7 9 3
[10,] B 100 1 4 4
[11,] B 101 1 4 4
...
私がしたいこと
すべてのID
and の組み合わせについて、 andF1YR
の組み合わせの値を取得したいと思います。例: 会社 A の値はfor でした。ここで、既存の値 1 の横に、 and が 2 に設定されているすべての組み合わせの追加の列が必要です。ID
F0YR
2
FOYR==4
ID=="A"
F1YR==4
私が試したこと
intDT <- DT[CJ(unique(ID), unique(F0YR)), list(ID, F0YR, valueNew = value), mult="last"]
setkey(intDT, ID, F0YR)
setkey(DT, ID, F1YR)
DT <- intDT[DT]
setnames(DT, c("F0YR.1", "F0YR"), c("F0YR", "F1YR"))
DT
ID F1YR valueNew MONTH F0YR value
[1,] A 4 2 100 1 1
[2,] A 4 2 101 1 1
[3,] A 4 2 102 1 1
[4,] A 7 3 103 4 2
[5,] A 7 3 104 4 2
[6,] A 7 3 105 4 2
[7,] A 9 NA 106 7 3
[8,] A 9 NA 107 7 3
[9,] A 9 NA 108 7 3
[10,] B 4 5 100 1 4
[11,] B 4 5 101 1 4
...
(mult="last"
値は F0YR または F1YR の変更でのみ変更されるはずですが、変更されない場合があり、これは私のタイブレーカーであるため、ここで使用していることに注意してください)。
私が欲しいもの
これは改善できそうです。まず、DT のコピーを作成する必要があります。次に、基本的に同じ に参加するためdata.table
、すべての列名が同じ名前になり、名前を変更する必要があります。私はaself join
が進むべき道だと思っていましたが、試してみましたが、良い解決策を得ることができませんでした. 私には見えない簡単なものがあることを願っています...誰か手がかりを持っていますか? または、実際には難しいようにデータが設定されていますか (おそらく、毎月の観測があるが、四半期ごとまたは年ごとに変化する値のみを結合したいため)。