[R] problem with indicators for switch

jim holtman jholtman at gmail.com
Mon Aug 2 17:22:42 CEST 2010


try this:

> x <- read.table(textConnection("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"), header=TRUE)
> closeAllConnections()
> # initialize 'c' & 'd'
> x$c <- NA
> x$d <- 0
> # assume 'c' is initially off
> x$c[1] <- 0
> # set 'c' to value of 'a' or 'b'
> x$c[x$a == 1] <- 1
> x$c[x$b == 1] <- 0
> # use the 'zoo' package for na.locf function
> require(zoo)
> # carry forward the value in 'c'
> x$c <- na.locf(x$c)
> # add a column for grouping
> x$grp <- cumsum(c(0, diff(x$c) != 0))
> # now put on the count
> x$d <- ave(x$c, x$grp, FUN=cumsum)
> # remove 'grp'
> x$grp <- NULL
> x
   a b c d
1  0 0 0 0
2  0 0 0 0
3  1 0 1 1
4  1 0 1 2
5  0 0 1 3
6  0 0 1 4
7  1 0 1 5
8  0 0 1 6
9  0 0 1 7
10 0 1 0 0
11 0 0 0 0
12 0 0 0 0
13 0 0 0 0
14 0 0 0 0
15 1 0 1 1
16 0 0 1 2
17 0 0 1 3
18 0 0 1 4
19 0 1 0 0
20 0 0 0 0
>
>


On Mon, Aug 2, 2010 at 8:15 AM, Roy Davy <roydavy at hotmail.com> 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?
>
> 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.
>



-- 
Jim Holtman
Cincinnati, OH
+1 513 646 9390

What is the problem that you are trying to solve?



More information about the R-help mailing list