Jak najlepiej połączyć jedną kolumnę tabeli danych z inną kolumną tej samej tabeli danych?

Moje dane

Mam tabelę danychDT z prądem (F0YR) i następne (F1YR) koniec roku obrachunkowego (FYE) zakodowany jako liczby całkowite. Ponieważ każdy następny FYE stanie się w końcu bieżącym FYE, liczba całkowita będzie obie w kolumnieF1YR iF0YR. Moje dane zawierają również obserwacje miesięczne, więc ten sam FYE będzie w zestawie danych wielokrotnie:

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
...
Co chcę robić

Dla każdegoID iF1YR kombinacja, chcę uzyskać wartość dlaID iF0YR połączenie. Jako przykład: Firma A miała wartość2 dlaFOYR==4. Teraz chcę dodatkową kolumnę dla wszystkich kombinacji zID=="A" iF1YR==4 który jest ustawiony na 2, obok już istniejącej wartości 1.

Co próbowałem
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
...

(Zauważ, że używammult="last" tutaj, ponieważ chociaż wartości powinny się zmieniać tylko w przypadku zmian F0YR lub F1YR, czasami nie, a to jest tylko mój wyłącznik krawatowy.

Czego chcę

To wygląda na improwizowane. Przede wszystkim muszę zrobić kopię mojego DT. Po drugie, ponieważ przyłączam się zasadniczo do tego samegodata.table, wszystkie nazwy kolumn mają tę samą nazwę i muszę je zmienić. Myślałem, że aself join byłby to krok naprzód, ale próbowałem i próbowałem i nie mogłem znaleźć dobrego rozwiązania. Mam nadzieję, że jest tam coś łatwego, czego po prostu nie widzę ... Czy ktoś ma jakąś wskazówkę? Albo czy moje dane są skonfigurowane w taki sposób, że są naprawdę trudne (może dlatego, że mam miesięczne obserwacje, ale chcę dołączyć tylko zmieniające się kwartalnie lub roczne wartości).

questionAnswers(1)

yourAnswerToTheQuestion