Hi Michael,

The days in your example do not look continuous (at least from my
thinking), so you may have extra requirements in mind, but take a look
at this code.  My general thought was first to turn each column into a
logical vector (c1 >= 100 and c2 >= 8).  Taking advantage of the fact
that R treats TRUE as 1 and FALSE as 0, compute a rolling mean.  If
(and only if) 5 consecutive values are TRUE, the mean will be 1.  Next
I added the rolling means for each column, and then tested whether any
were 2 (i.e., 1 + 1).

Cheers,

Josh

###################
#Load required package
library(zoo)

#Your data with ds converted to Date
#from dput()
dat <-
structure(list(ds = structure(c(14702, 14729, 14730, 14731, 14732,
14733, 14734, 14735, 14736, 14737, 14738, 14739, 14740, 14741,
14742, 14743, 14744), class = "Date"), c1 = c(100L, 11141L, 3L,
7615L, 6910L, 5035L, 3007L, 4L, 8335L, 2897L, 6377L, 3177L, 7946L,
8705L, 9030L, 8682L, 8440L), c2 = c(0L, 15L, 16L, 14L, 17L, 3L,
15L, 14L, 17L, 13L, 17L, 17L, 15L, 0L, 16L, 16L, 1L)), .Names = c("ds",
"c1", "c2"), row.names = c(NA, -17L), class = "data.frame")

#Order by ds
dat <- dat[order(dat$ds), ]

yourvar <- 0

#Test that 5 consecutive values from c1 AND c2 meet requirements
if(any(
 c(rollmean(dat$c1 >= 100, 5) + rollmean(dat$c2 >= 8, 5)) == 2)
   ) {yourvar <- 1}

###################

On Sat, Jul 17, 2010 at 2:38 PM, Michael Hess <mlh...@med.umich.edu> wrote:
> Sorry for not being clear.
>
> In the dataset there are around 100 or so days of data (in the case also rows 
> of data)
>
> I need to make sure that the person meets that c1 is at least 100 AND c2 is 
> at least 8 for 5 of 7 continuous days.
>
> I will play with what I have and see if I can find out how to do this.
>
> Thanks for the help!
>
> Michael
>
>>>> Stephan Kolassa  07/17/10 4:50 PM >>>
> Mike,
>
> I am slightly unclear on what you want to do. Do you want to check rows
> 1 and 7 or 1 *to* 7? Should c1 be at least 100 for *any one* or *all*
> rows you are looking at, and same for c2?
>
> You can sort your data like this:
> data <- data[order(data$ds),]
>
> Type ?order for help. But also do this for added enlightenment...:
>
> library(fortunes)
> fortune("dog")
>
> Next, your analysis on the sorted data frame. As I said, I am not
> entirely clear on what you are looking at, but the following may solve
> your problem with choices "1 to 7" and "any one" above.
>
> foo <- 0
> for ( ii in 1:(nrow(data)-8) ) {
>   if (any(data$c1[ii+seq(0,6)]>=100) & any(data$c2[ii+seq(0,6)]>=8)) {
>     foo <- 1
>     break
>   }
> }
>
> The variable "foo" should contain what you want it to. Look at ?any
> (and, if this does not do what you want it to, at ?all) for further info.
>
> No doubt this could be vectorized, but I think the loop is clear enough.
>
> Good luck!
> Stephan
>
>
>
> Michael Hess schrieb:
>> Hello R users,
>>
>> I am a researcher at the University of Michigan looking for a solution to an 
>> R problem.  I have loaded my data in from a mysql database and it looks like 
>> this
>>
>>> data
>>            ds c1 c2
>> 1  2010-04-03        100           0
>> 2  2010-04-30      11141          15
>> 3  2010-05-01      3          16
>> 4  2010-05-02       7615          14
>> 5  2010-05-03       6910          17
>> 6  2010-05-04       5035          3
>> 7  2010-05-05       3007          15
>> 8  2010-05-06       4          14
>> 9  2010-05-07       8335          17
>> 10 2010-05-08       2897          13
>> 11 2010-05-09       6377          17
>> 12 2010-05-10       3177          17
>> 13 2010-05-11       7946          15
>> 14 2010-05-12       8705          0
>> 15 2010-05-13       9030          16
>> 16 2010-05-14       8682          16
>> 17 2010-05-15       8440          15
>>
>>
>> What I am trying to do is sort by ds, and take rows 1,7, see if c1 is at 
>> least 100 AND c2 is at least 8. If it is not, start with check rows 2,8 and 
>> if not there 3,9....until it loops over the entire file.   If it finds a set 
>> that matches, set a new variable equal to 1, if never finds a match, set it 
>> equal to 0.
>>
>> I have done this in stata but on this project we are trying to use R.  Is 
>> this something that can be done in R, if so, could someone point me in the 
>> correct direction.
>>
>> Thanks,
>>
>> Michael Hess
>> University of Michigan
>> Health System
>>
>> **********************************************************
>> Electronic Mail is not secure, may not be read every day, and should not be 
>> used for urgent or sensitive issues
>>
>> ______________________________________________
>> 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.
>>
>
>
> **********************************************************
> Electronic Mail is not secure, may not be read every day, and should not be 
> used for urgent or sensitive issues
>
> ______________________________________________
> 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.
>



-- 
Joshua Wiley
Ph.D. Student, Health Psychology
University of California, Los Angeles
http://www.joshuawiley.com/

______________________________________________
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