This question is related to a post with a similar name ( replace NA in the R-vector with adjacent values ). I would like to scan a column in a data frame and replace NA with a value in an adjacent cell. In the above article, the solution was to replace NA not with a value from a neighboring vector (for example, an adjacent element in the data matrix), but with a conditional replacement for a fixed value. The following is a reproducible example of my 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 <- data.frame (UNIT, STATUS, TERMINATED, START, STOP) 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
The result should be:
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