[R] problem with indicators for switch
Charles C. Berry
cberry at tajo.ucsd.edu
Mon Aug 2 17:23:11 CEST 2010
On Mon, 2 Aug 2010, Roy Davy wrote:
>
> Hi,
>
> I am having some problems setting up some indicators and would appreciate any help.
> I have some data called 'lights' with 3 variables called x, a and b.
> x - is the date
> a - equals 1 to indicate an 'on' button is activated
> b - equals 1 to indicate an 'off' button is activated
>
> Essentially i wannt to create 2 new variables c and d
> c - will reflect the current state of the light (1 being on)
> d - will be a count for how many days the light has been on
>
> here's some data with the date omitted to illustrate what i have and what is required.
>
> a b c d
> 0 0 0 0
> 0 0 0 0
> 1 0 1 1
> 1 0 1 2
> 0 0 1 3
> 0 0 1 4
> 1 0 1 5
> 0 0 1 6
> 0 0 1 7
> 0 1 0 0
> 0 0 0 0
> 0 0 0 0
> 0 0 0 0
> 0 0 0 0
> 1 0 1 1
> 0 0 1 2
> 0 0 1 3
> 0 0 1 4
> 0 1 0 0
> 0 0 0 0
>
> After some considerable time i have managed to create variable c with a
> loop but it's really slow with the volume of data i have. Could anyone
> please show me how to do this efficiently?
Two solutions:
1) inline - if you are configured to compile source,
use the inline package to render your loop as C or Fortran
2) findInterval - like this:
on.pos <- which(a==1)
off.pos <- which(b==1)
last.on <- c(0,on.pos)[ 1 + findInterval(1:20,on.pos)]
last.off <- c(0,off.pos)[ 1 + findInterval(1:20,off.pos)]
cee <- as.integer(last.on>last.off)
Don't use 'c' as a variable name as it is a common function
HTH,
Chuck
>
> I hope this is clear...
>
> Thanks
>
>
> Roy
> ______________________________________________
> R-help at 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.
>
Charles C. Berry (858) 534-2098
Dept of Family/Preventive Medicine
E mailto:cberry at tajo.ucsd.edu UC San Diego
http://famprevmed.ucsd.edu/faculty/cberry/ La Jolla, San Diego 92093-0901
More information about the R-help
mailing list