Hi to all members of R list,

 

I�m working with data.table package, and with 6
variables:

 

ID: Subject identifier

born: Birthdate

start: Starting date 

register: date of measurement 

value: Value of measurement

end: date of expiration of the measurements.

 

So, the natural order of date variables would be: born
=< start =< register =< end. As an example, I have:

 

DT <- data.table(ID =
as.factor(rep(1:4,each=2)), 

      born=as.Date(rep(c("1955-02-20","1990-07-25","1972-03-18",
"1988-05-03"),each=2)),

      
start=as.Date(rep(c("1953-03-28","1990-07-01","1983-09-05","1988-07-18"),each=2)),

      register = as.Date(c("1955-08-11",
"1958-03-28", "1990-07-09", "1992-07-01", 

                  "1983-09-05", "2002-09-28",
"1992-07-10", "1993-03-12")),

      value=c(205, 346, 34, 76, 320, 148, 209, 274),

      end=as.Date(rep(c("1960-11-05",
"1997-10-15", "2002-09-27",
"1997-03-02"),each=2)))

 

I would want to make 3 operations:

a)      Remove
entire ID�s where start is previous to born date (excepting those subjects
whose month and year values are the same in �start� and �born� variables: I
assign �born� date to �start� date in these cases).

b)      Remove
only specific rows (not all ID) where �register� is previous to �start�.

c)       Remove
only specific rows (not all ID) where �end� is previous to �register�.

 

DT[ , 

  {


   
if (all(born > start))  

   
{

   
indx <- which(paste(year(born))==paste(year(start)) &  
paste(month(born))==paste(month(start))) 

   
result <- list(born=born[indx],start=born[indx],register=register[indx],

value=value[indx], end=end[indx]) 

   
}  

     
if (all(register > start) | all(end > register))

      {

     
      indx <- which((register
> start) | (end > register))

     
      result <-
list(born=born[indx],start=start[indx], register=register[indx], 

value=value[indx], end=end[indx]) 

}

      else

      {

      
     NULL

     
      }

  else

   
{

   
indx <- which(all(register > start) | all(end > register))

   
result <- list(born=born[indx], start=start[indx],
register=register[indx], 

value=value[indx], end=end[indx]) 

    
}

  
result

  
}, by=ID]

 

Error: unexpected 'else' in:

"      }

  else"

 

                                          
        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to