On 08/13/2011 06:23 AM, erinbspace wrote:
Hello R help!

I am extremely new to R (as in 3 just days) and I've been using it to do
some pretty basic things. I am frustratingly stuck on one point, and am so
so so close to figuring it out, but just far enough away to ask for some
(perhaps embarrassingly easy) help.

I have a dataset, visitors, that has a variable called Time.Spent.
Time.Spent consists of times in the format hh:mm:ss , and it is a
measurement, kind of like a timer, of the amount of time someone spent in a
museum exhibit.

I need to find the average time spent.  I've figured the easiest way to do
this would be to convert it into seconds. I found a function that someone
wrote on how to do this here:
http://stackoverflow.com/questions/1389428/dealing-with-time-periods-such-as-5-minutes-and-30-seconds-in-r

I thought this would be the answer! However, when I run the code, it works
perfectly for the first variable in the first observation, but then repeats
the same answer all the way down the rows.

Sorry for the wordiness, here's the code I have:

# The function to convert hh:mm:ss into just seconds:

time.to.seconds<- function(time) {
    time<- strsplit(time, ":")[[1]]
    return ((as.numeric(time[1]) * 60 * 60) + (as.numeric(time[2]) * 60) +
(as.numeric(time[3])))
}

# I've tried many things to then create a new variable in the dataset
visitors:

visitors$TimeInSeconds<- time.to.seconds(time=c(visitors$Time.Spent))

# Or

visitors$TimeInSeconds<- time.to.seconds(visitors$Time.Spent)


I figure it has something to do with the fact that strsplit() makes a list?
Do I need a loop to go through each variable? I know this is a huge question
but any hints at al would be very much appreciated.

Hi erinbspace,
By hard coding the [[1]] in your function, you are automatically taking the first element of any list. If you want to convert a vector of times, try this:

time.to.seconds<- function(time) {
 time<-strsplit(time, ":")[[1]]
 return(as.numeric(time[1]) * 3600 + as.numeric(time[2]) * 60 +
  as.numeric(time[3]))
}
watch.times<-c("0:2:31","0:4:12","0:0:47")
# use sapply to step through the vector of times
sapply(watch.times,time.to.seconds)
0:2:31 0:4:12 0:0:47
   151    252     47

Jim

______________________________________________
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.

Reply via email to