I like loops for this kind of thing so here is one:
df<- structure(list(start = c("15:00", "15:00", "15:00", "11:00",
"14:00", "14:00", "15:00", "12:00", "12:00", "12:00", "12:00",
"12:00", "12:00", "12:00", "12:00", "12:00", "12:00", "12:00",
"12:00", "12:00"), end = c("16:00", "16:00", "16:00", "12:00",
"16:00", "15:00", "16:00", "13:00", "13:00", "13:00", "13:00",
"13:00", "13:00", "13:00", "13:00", "13:00", "13:00", "13:00",
"13:00", "13:00")), .Names = c("start", "end"), row.names = c(NA,
20L), class = "data.frame")
duration<- with(df, floor(
as.numeric(
difftime(strptime(end, format="%H:%M"),
strptime(start, format="%H:%M"),
units = "hours"))))
start<- as.integer(substr(df$start, 1, 2))
a<- matrix(FALSE, nrow = NROW(df), ncol = 24,
dimnames = list(1:NROW(df), paste("t", 0:23, sep = "")))
for (i in 1:NROW(df)) {
names<- paste("t", seq(start[i], by = 1L, length.out = duration[i]), sep =
"")
a[i, names]<- TRUE
}
r<- range(which(apply(a, 2, any)))
a<- a[, r[1]:r[2]] # Drop columns we do not need
head(a)
# t11 t12 t13 t14 t15
# 1 FALSE FALSE FALSE FALSE TRUE
# 2 FALSE FALSE FALSE FALSE TRUE
# 3 FALSE FALSE FALSE FALSE TRUE
# 4 TRUE FALSE FALSE FALSE FALSE
# 5 FALSE FALSE FALSE TRUE TRUE
# 6 FALSE FALSE FALSE TRUE FALSE
Hope this helps a little.
Allan
On 23/07/10 11:02, Stefan Uhmann wrote:
Hi List,
I have start and end times of events
structure(list(start = c("15:00", "15:00", "15:00", "11:00",
"14:00", "14:00", "15:00", "12:00", "12:00", "12:00", "12:00",
"12:00", "12:00", "12:00", "12:00", "12:00", "12:00", "12:00",
"12:00", "12:00"), end = c("16:00", "16:00", "16:00", "12:00",
"16:00", "15:00", "16:00", "13:00", "13:00", "13:00", "13:00",
"13:00", "13:00", "13:00", "13:00", "13:00", "13:00", "13:00",
"13:00", "13:00")), .Names = c("start", "end"), row.names = c(NA,
20L), class = "data.frame")
and I would like the data to look like this:
t9 t10 t11 t12 t13 t14 t15 t16 t17
1 FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
2 FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
3 FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
4 FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
5 FALSE FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE
6 FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE
7 FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
8 FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
9 FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
10 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
Which means, that I just get a TRUE for every hour the event was
taking place. A finishing time of 16:00 means that t16 is FALSE,
because the event was finished until 16:00; 16:15 as end time would
result in t16 being TRUE.
It would be nice if the function would add the variables needed (t9
..) as well and depending on the times put in (no t9 if there is no
event starting before 10:00).
Thanks for any suggestion,
Stefan
______________________________________________
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.
______________________________________________
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.