peregrine
2014-May-08 21:19 UTC
[R] How to write a loop in which i has to be in POSIX format?
Hallo,
I have a table in which I would like to insert the min and max values of
another column (date and time in as.POSIXct Format).
This is my row table, where "su" and "sa" are still the same
as "Vollzeit":
head(treat)
Vollzeit Datum Zugnacht su
sa
2 2013-09-09 20:15:00 2013-09-09 2013-09-09 2013-09-09 20:15:00 2013-09-09
20:15:00
3 2013-09-09 20:30:00 2013-09-09 2013-09-09 2013-09-09 20:30:00 2013-09-09
20:30:00
4 2013-09-09 20:45:00 2013-09-09 2013-09-09 2013-09-09 20:45:00 2013-09-09
20:45:00
5 2013-09-09 21:00:00 2013-09-09 2013-09-09 2013-09-09 21:00:00 2013-09-09
21:00:00
6 2013-09-09 21:15:00 2013-09-09 2013-09-09 2013-09-09 21:15:00 2013-09-09
21:15:00
7 2013-09-09 21:30:00 2013-09-09 2013-09-09 2013-09-09 21:30:00 2013-09-09
21:30:00
Now I want to insert the minimum value of "Vollzeit" for each date in
"Zugnacht" into the column "su" and the maximum value of
"Vollzeit" for each
date in "Zugnacht" into the column "sa". If I do it like
this, it does
exactly what I want:
zn <- unique(treat$Zugnacht)
i=zn[1]
treat$su[treat$Zugnacht==as.POSIXct(i, "UTC")] <-
min(treat$Vollzeit[treat$Zugnacht==as.POSIXct(i, "UTC")])
treat$sa[treat$Zugnacht==as.POSIXct(i, "UTC")] <-
max(treat$Vollzeit[treat$Zugnacht==as.POSIXct(i, "UTC")])
This is the result for the first date in "Zugnacht":
head(treat)
Vollzeit Datum Zugnacht su
sa
2 2013-09-09 20:15:00 2013-09-09 2013-09-09 2013-09-09 20:15:00 2013-09-10
04:30:00
3 2013-09-09 20:30:00 2013-09-09 2013-09-09 2013-09-09 20:15:00 2013-09-10
04:30:00
4 2013-09-09 20:45:00 2013-09-09 2013-09-09 2013-09-09 20:15:00 2013-09-10
04:30:00
5 2013-09-09 21:00:00 2013-09-09 2013-09-09 2013-09-09 20:15:00 2013-09-10
04:30:00
6 2013-09-09 21:15:00 2013-09-09 2013-09-09 2013-09-09 20:15:00 2013-09-10
04:30:00
7 2013-09-09 21:30:00 2013-09-09 2013-09-09 2013-09-09 20:15:00 2013-09-10
04:30:00
However I am not able to create a loop that runs over all 113 dates in zn. I
tried this, but it does not work. Can anybody help, please?
for (i in zn){
treat$su[treat$Zugnacht==as.POSIXct(zn[i], "UTC")] <-
min(treat$Vollzeit[treat$Zugnacht==as.POSIXct(zn[i], "UTC")])
treat$sa[treat$Zugnacht==as.POSIXct(zn[i], "UTC")] <-
max(treat$Vollzeit[treat$Zugnacht==as.POSIXct(zn[i], "UTC")])
}
Kind regards
Christiane
--
View this message in context:
http://r.789695.n4.nabble.com/How-to-write-a-loop-in-which-i-has-to-be-in-POSIX-format-tp4690212.html
Sent from the R help mailing list archive at Nabble.com.
Tom Wright
2014-May-09 21:02 UTC
[R] How to write a loop in which i has to be in POSIX format?
i is an element in zn so replace zn[i] with just i
for (i in zn){
treat$su[treat$Zugnacht==as.POSIXct(i, "UTC")] <-
min(treat$Vollzeit[treat$Zugnacht==as.POSIXct(zni, "UTC")])
treat$sa[treat$Zugnacht==as.POSIXct(zni, "UTC")] <-
max(treat$Vollzeit[treat$Zugnacht==as.POSIXct(zni, "UTC")])
}
If you want to keep i as an index you need something like:
for(i in 1:length(i))
{
#do stuff on zn[i]
}
On Thu, 2014-05-08 at 14:19 -0700, peregrine wrote:> Hallo,
>
> I have a table in which I would like to insert the min and max values of
> another column (date and time in as.POSIXct Format).
>
> This is my row table, where "su" and "sa" are still the
same as "Vollzeit":
>
> head(treat)
> Vollzeit Datum Zugnacht su
> sa
> 2 2013-09-09 20:15:00 2013-09-09 2013-09-09 2013-09-09 20:15:00 2013-09-09
> 20:15:00
> 3 2013-09-09 20:30:00 2013-09-09 2013-09-09 2013-09-09 20:30:00 2013-09-09
> 20:30:00
> 4 2013-09-09 20:45:00 2013-09-09 2013-09-09 2013-09-09 20:45:00 2013-09-09
> 20:45:00
> 5 2013-09-09 21:00:00 2013-09-09 2013-09-09 2013-09-09 21:00:00 2013-09-09
> 21:00:00
> 6 2013-09-09 21:15:00 2013-09-09 2013-09-09 2013-09-09 21:15:00 2013-09-09
> 21:15:00
> 7 2013-09-09 21:30:00 2013-09-09 2013-09-09 2013-09-09 21:30:00 2013-09-09
> 21:30:00
>
> Now I want to insert the minimum value of "Vollzeit" for each
date in
> "Zugnacht" into the column "su" and the maximum value
of "Vollzeit" for each
> date in "Zugnacht" into the column "sa". If I do it
like this, it does
> exactly what I want:
>
> zn <- unique(treat$Zugnacht)
> i=zn[1]
> treat$su[treat$Zugnacht==as.POSIXct(i, "UTC")] <-
> min(treat$Vollzeit[treat$Zugnacht==as.POSIXct(i, "UTC")])
> treat$sa[treat$Zugnacht==as.POSIXct(i, "UTC")] <-
> max(treat$Vollzeit[treat$Zugnacht==as.POSIXct(i, "UTC")])
>
> This is the result for the first date in "Zugnacht":
> head(treat)
> Vollzeit Datum Zugnacht su
> sa
> 2 2013-09-09 20:15:00 2013-09-09 2013-09-09 2013-09-09 20:15:00 2013-09-10
> 04:30:00
> 3 2013-09-09 20:30:00 2013-09-09 2013-09-09 2013-09-09 20:15:00 2013-09-10
> 04:30:00
> 4 2013-09-09 20:45:00 2013-09-09 2013-09-09 2013-09-09 20:15:00 2013-09-10
> 04:30:00
> 5 2013-09-09 21:00:00 2013-09-09 2013-09-09 2013-09-09 20:15:00 2013-09-10
> 04:30:00
> 6 2013-09-09 21:15:00 2013-09-09 2013-09-09 2013-09-09 20:15:00 2013-09-10
> 04:30:00
> 7 2013-09-09 21:30:00 2013-09-09 2013-09-09 2013-09-09 20:15:00 2013-09-10
> 04:30:00
>
>
> However I am not able to create a loop that runs over all 113 dates in zn.
I
> tried this, but it does not work. Can anybody help, please?
>
> for (i in zn){
> treat$su[treat$Zugnacht==as.POSIXct(zn[i], "UTC")] <-
> min(treat$Vollzeit[treat$Zugnacht==as.POSIXct(zn[i], "UTC")])
> treat$sa[treat$Zugnacht==as.POSIXct(zn[i], "UTC")] <-
> max(treat$Vollzeit[treat$Zugnacht==as.POSIXct(zn[i], "UTC")])
> }
>
> Kind regards
> Christiane
>
>
>
>
> --
> View this message in context:
http://r.789695.n4.nabble.com/How-to-write-a-loop-in-which-i-has-to-be-in-POSIX-format-tp4690212.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> 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.