Ersetzen Sie NA in der Spalte durch den Wert in der benachbarten Spalte

Diese Frage bezieht sich auf einen Beitrag mit einem ähnlichen Titel (Ersetzen Sie NA in einem R-Vektor durch benachbarte Werte). Ich möchte eine Spalte in einem Datenrahmen scannen und NAs durch den Wert in der benachbarten Zelle ersetzen. In dem oben erwähnten Beitrag bestand die Lösung darin, die NA nicht durch den Wert aus dem benachbarten Vektor (z. B. das benachbarte Element in der Datenmatrix) zu ersetzen, sondern war ein bedingtes Ersetzen für einen festen Wert. Unten ist ein reproduzierbares Beispiel für mein Problem:

UNIT <- c(NA,NA, 200, 200, 200, 200, 200, 300, 300, 300,300)
STATUS <-c('ACTIVE','INACTIVE','ACTIVE','ACTIVE','INACTIVE','ACTIVE','INACTIVE','ACTIVE','ACTIVE',
                    'ACTIVE','INACTIVE') 
TERMINATED <- c('1999-07-06' , '2008-12-05' , '2000-08-18' , '2000-08-18' ,'2000-08-18' ,'2008-08-18',
                        '2008-08-18','2006-09-19','2006-09-19' ,'2006-09-19' ,'1999-03-15') 
START <- c('2007-04-23','2008-12-06','2004-06-01','2007-02-01','2008-04-19','2010-11-29','2010-12-30',
                   '2007-10-29','2008-02-05','2008-06-30','2009-02-07')
STOP <- c('2008-12-05','4712-12-31','2007-01-31','2008-04-18','2010-11-28','2010-12-29','4712-12-31',
                  '2008-02-04','2008-06-29','2009-02-06','4712-12-31')

TEST <- Datenrahmen (EINHEIT, STATUS, ABGESCHLOSSEN, STARTEN, STOPPEN) TEST

  UNIT   STATUS TERMINATED      START       STOP
1    NA   ACTIVE 1999-07-06 2007-04-23 2008-12-05
2    NA INACTIVE 2008-12-05 2008-12-06 4712-12-31
3   200   ACTIVE 2000-08-18 2004-06-01 2007-01-31
4   200   ACTIVE 2000-08-18 2007-02-01 2008-04-18
5   200 INACTIVE 2000-08-18 2008-04-19 2010-11-28
6   200   ACTIVE 2008-08-18 2010-11-29 2010-12-29
7   200 INACTIVE 2008-08-18 2010-12-30 4712-12-31
8   300   ACTIVE 2006-09-19 2007-10-29 2008-02-04
9   300   ACTIVE 2006-09-19 2008-02-05 2008-06-29
10  300   ACTIVE 2006-09-19 2008-06-30 2009-02-06
11  300 INACTIVE 1999-03-15 2009-02-07 4712-12-31

#using the syntax for a conditional replace and hoping it works :/          
TEST$UNIT[is.na(TEST$UNIT)] <- TEST$STATUS; TEST 

   UNIT   STATUS TERMINATED      START       STOP
1     1   ACTIVE 1999-07-06 2007-04-23 2008-12-05
2     2 INACTIVE 2008-12-05 2008-12-06 4712-12-31
3   200   ACTIVE 2000-08-18 2004-06-01 2007-01-31
4   200   ACTIVE 2000-08-18 2007-02-01 2008-04-18
5   200 INACTIVE 2000-08-18 2008-04-19 2010-11-28
6   200   ACTIVE 2008-08-18 2010-11-29 2010-12-29
7   200 INACTIVE 2008-08-18 2010-12-30 4712-12-31
8   300   ACTIVE 2006-09-19 2007-10-29 2008-02-04
9   300   ACTIVE 2006-09-19 2008-02-05 2008-06-29
10  300   ACTIVE 2006-09-19 2008-06-30 2009-02-06
11  300 INACTIVE 1999-03-15 2009-02-07 4712-12-31

Das Ergebnis sollte sein:

      UNIT   STATUS TERMINATED      START       STOP
1   ACTIVE   ACTIVE 1999-07-06 2007-04-23 2008-12-05
2 INACTIVE INACTIVE 2008-12-05 2008-12-06 4712-12-31
3      200   ACTIVE 2000-08-18 2004-06-01 2007-01-31
4      200   ACTIVE 2000-08-18 2007-02-01 2008-04-18
5      200 INACTIVE 2000-08-18 2008-04-19 2010-11-28
6      200   ACTIVE 2008-08-18 2010-11-29 2010-12-29
7      200 INACTIVE 2008-08-18 2010-12-30 4712-12-31
8      300   ACTIVE 2006-09-19 2007-10-29 2008-02-04
9      300   ACTIVE 2006-09-19 2008-02-05 2008-06-29
10     300   ACTIVE 2006-09-19 2008-06-30 2009-02-06
11     300 INACTIVE 1999-03-15 2009-02-07 4712-12-31

Antworten auf die Frage(2)

Ihre Antwort auf die Frage