Meine Beispieldaten.tabelle sieht wie folgt aus
Startdaten
%Vor%Das Ziel besteht darin, die Informationen in den Spalten Kontostand und Beschäftigung zu kopieren, wenn der Status von "P" nach "R" mit "id" wechselt. I.e. Ich möchte die Daten in der letzten Periode verwenden, in der eine ID "P" ist, und die vorhandenen Informationen für alle nächsten Perioden überschreiben, in denen die ID "R" ist.
Daher ist das Ziel, diese data.table
zu erhaltenZiel
%Vor%Beachten Sie, dass die Spalten time und status itself (und natürlich id) nicht betroffen sind.
Ich habe versucht, seq_len
über IDs zu verwenden, dann setze diese Spalte auf Null, wenn der Status "R ist und suche nach dem maximalen Wert (nach ID) dieser Spalte, um als Indikator zu verwenden, welche Zeile kopiert werden muss. Ich bin mir sicher, dass es einen schnelleren und besseren Weg gibt, das zu lösen. Vielleicht sogar ein Einzeiler.
Wenn etwas unklar ist, lass es mich wissen
Eine Möglichkeit besteht darin, die gewünschten Spalten auf NA
s zu setzen, wenn status == R
, und dann die letzte Beobachtung vorwärts zu führen (LOCF), da alle id
s mit P
beginnen, I don ' Ich denke, Sie müssen dies wirklich tun, indem Sie id
und damit die Leistung verbessern. Hier ist ein Weg
Hinzufügen einer einfachen data.table solution vs zoo solution. Data.table Rolling Join scheint besser zu skalieren.
%Vor%
Und der Maßstab.
%Vor%
Tags und Links r data.table