Hi all,

I would like to flag each record in the data according to certain conditions
as specified below.

For example,

If "Close_date" in *dat* is between ("Open" & "Close") or ("Open1" &
"Close1") or ("Open2" & "Close2") in *oc, *flag the records as "Valid",
otherwise "Invalid"

I would like to use sapply family functions if possible due to the nature of
large data set.


ini <- as.Date("2010/1/1", "%Y/%m/%d")
# Generate arbitrary data frame consisting of date values
oc <- data.frame(Open = seq(ini, ini + 5, 1), Close = seq(ini + 365, ini +
365 + 5, 1), Open1 = seq(ini + 365*2, ini + 365*2 + 5, 1), Close1 = seq(ini
+ 365*3, ini + 365*3 + 5, 1), Open2 = seq(ini + 365*4, ini + 365*4 + 5, 1),
Close2 = seq(ini + 365*5, ini + 365*5 + 5, 1))
rownames(oc) <- c("AAA", "AA", "A", "BBB", "BB", "B")
oc
             Open            Close           Open1          Close1
Open2        Close2
AAA   2010-01-01   2011-01-01    2012-01-01   2012-12-31   2013-12-31
 2014-12-31
AA     2010-01-02   2011-01-02    2012-01-02   2013-01-01   2014-01-01
2015-01-01
A       2010-01-03   2011-01-03    2012-01-03    2013-01-02   2014-01-02
2015-01-02
BBB  2010-01-04    2011-01-04    2012-01-04    2013-01-03   2014-01-03
2015-01-03
BB     2010-01-05   2011-01-05    2012-01-05    2013-01-04   2014-01-04
2015-01-04
B       2010-01-06   2011-01-06    2012-01-06    2013-01-05   2014-01-05
2015-01-05


dat <- data.frame(Class = c("AAA", "C", "CC", "BB", "B", "A"), Close_date =
c(ini, ini, ini, ini+109, ini+39, ini+24), stringsAsFactors = FALSE)
dat
  Class    Close_date
1   AAA   2010-01-01
2     A     2010-01-01
3    CC    2010-01-01
4    BB    2010-04-20
5     B     2010-02-09
6     A     2010-01-25


Desired result is:

   Class   Close_date   Flag
1   AAA   2010-01-01   Valid
2     A     2010-01-01   Invalid
3    CC    2010-01-01   Valid
4    BB    2010-04-20   Valid
5     B     2010-02-09   Valid
6     A     2010-01-25   Valid


The following seems to be a failure..

for (i in length(ind))  {
    dat[["Flag"]] <- sapply(dat$Close_date, function(x) ifelse((x >=
oc[ind[i], 1] & x < oc[ind[i], 2]) | (x >= oc[ind[i], 3] & x < oc[ind[i],
4]) | (x >= oc[ind[i], 5] & x < oc[ind[i], 6]) | (x >= oc[ind[i], 7] & x <
oc[ind[i], 8]), "Valid", "Invalid"))
}

Any resolution in this would be greatly appreciated.

Many thanks in advance.



-- 
Steven

	[[alternative HTML version deleted]]

