[R] Imposing more than one condition to if

jim holtman jholtman at gmail.com
Sun Jul 15 21:17:55 CEST 2012


try this:

> set.seed(1)
> day= rep(1:30, each=10)
> n= length(day); x= c(1:24)
> time= sample(x, 300, replace= T)
> light= rep(c(20,10,6,0,0,0,0,0,8,20), 30)
> d=data.frame(day,time,light)
>
> # create a dawn/dusk column to mark where it happens
> d$dawn <- c(FALSE, (head(d$light, -1) < 2) & (tail(d$light, -1) > 2))
> d$dusk <- c((head(d$light, -1) > 2) & (tail(d$light, -1) < 2), FALSE)
>
> # now split and recombine to get the values for the day
> result <- do.call(rbind, lapply(split(d, d$day), function(.day){
+     # create new dataframe with the values
+     cbind(.day[, c('day', 'time', 'light')]
+         , dawn = .day$time[.day$dawn]
+         , dusk = .day$time[.day$dusk]
+         )
+ }))
>
>
>
> result
       day time light dawn dusk
1.1      1    7    20   16   14
1.2      1    9    10   16   14
1.3      1   14     6   16   14
1.4      1   22     0   16   14
1.5      1    5     0   16   14
1.6      1   22     0   16   14
1.7      1   23     0   16   14
1.8      1   16     0   16   14
1.9      1   16     8   16   14
1.10     1    2    20   16   14
2.11     2    5    20   10   17
2.12     2    5    10   10   17
2.13     2   17     6   10   17
2.14     2   10     0   10   17
2.15     2   19     0   10   17
2.16     2   12     0   10   17
2.17     2   18     0   10   17
2.18     2   24     0   10   17
2.19     2   10     8   10   17
2.20     2   19    20   10   17
3.21     3   23    20   21   16
3.22     3    6    10   21   16
3.23     3   16     6   21   16
3.24     3    4     0   21   16
3.25     3    7     0   21   16
3.26     3   10     0   21   16
3.27     3    1     0   21   16
3.28     3   10     0   21   16
3.29     3   21     8   21   16
3.30     3    9    20   21   16
4.31     4   12    20   18   12
4.32     4   15    10   18   12
4.33     4   12     6   18   12
4.34     4    5     0   18   12
4.35     4   20     0   18   12
4.36     4   17     0   18   12
4.37     4   20     0   18   12
4.38     4    3     0   18   12
4.39     4   18     8   18   12
4.40     4   10    20   18   12




On Sun, Jul 15, 2012 at 12:32 PM, Santiago Guallar <sguallar at yahoo.com> wrote:
> Hi,
>
> I have a dataset which contains several time records for a number of days, plus a variable (light) that allows to determine night time (lihgt= 0) and daytime (light> 0). I need to obtain get dusk time and dawn time for each day and place them in two columns.
>
> This is the starting point (d):
> day time light
> 1     1       20
> 1     12     10
> 1     11     6
> 1     9       0
> 1     6       0
> 1     12     0
> ...
> 30     8     0
> 30     3     0
> 30     8     0
> 30     3     0
> 30     8     8
> 30     9     20
>
>
> And this what I want to get:
> day time light dusk dawn
> 1     1      20     11     10
> 1     12    10     11     10
> 1     11     6      11     10
> 1     9       0      11     10
> 1     6       0      11     10
> 1     12     0      11     10
> ...
> 30     8     0       9     5
> 30     3     0       9     5
> 30     8     0       9     5
> 30     3     0       9     5
> 30     8     8       9     5
> 30     9     20     9     5
>
> This is the code for data frame d:
> day= rep(1:30, each=10)
> n= length(dia); x= c(1:24)
> time= sample(x, 300, replace= T)
> light= rep(c(20,10,6,0,0,0,0,0,8,20), 30)
> d=data.frame(day,time,light)
>
> I'd need to impose a double condition like the next but if does not take more than one:
> attach(d)
> for (i in 1: n){
> if (light[i-1]>2 & light[i]<2){
> d$dusk<- time[i-1]
> }
> if (light[i-1]<2 & light[i]>2){
> d$dawn<- time[i]
> }
> }
> detach(d)
> d
>
> Thank you for your help
>         [[alternative HTML version deleted]]
>
>
> ______________________________________________
> 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
Data Munger Guru

What is the problem that you are trying to solve?
Tell me what you want to do, not how you want to do it.



More information about the R-help mailing list