drr
2012-Mar-29 11:57 UTC
[R] Adding duration (hh:mm:ss)\Converting factor column into duration class
Hi All,
I have a data frame:
Time1 Time2
1 176:46:10 41:48:06
2 171:28:57 61:19:10
3 178:25:15 34:05:35
4 74:04:20 25:01:55
5 136:11:20 37:59:32
6 138:17:17 30:22:27
7 183:04:48 29:25:02
8 179:35:01 19:29:44
> str(df)
'data.frame': 8 obs. of 2 variables:
$ Time1: Factor w/ 583 levels "","00:00:01",..: 574 573 575
583 565 566 579
577
$ Time2: Factor w/ 1298 levels "00:00:00","00:00:01",..:
1292 1297 1288
1281 1290 1286 1284 1279
I would like to make calculations (adding, summing) on this data. How do I
transform those factors into duration data (in format hh:mm:ss). I have
already found *lubridate* package but it does not work with factors. I tried
to convert as numeric, but it never works for me.
How do I do that?
--
View this message in context:
http://r.789695.n4.nabble.com/Adding-duration-hh-mm-ss-Converting-factor-column-into-duration-class-tp4515210p4515210.html
Sent from the R help mailing list archive at Nabble.com.
R. Michael Weylandt
2012-Mar-29 15:43 UTC
[R] Adding duration (hh:mm:ss)\Converting factor column into duration class
Factor -> numeric is tricky sometimes: you need to do this
as.numeric(as.character(x))
but that's not going to work for you here because you don't really
want numbers.
Instead try something like this (untested though):
parseDuration <- function(t1, t2){
t1 <- as.numeric(unlist(strsplit(as.character(t1), ":")))
t2 <- as.numeric(unlist(strsplit(as.character(t2), ":")))
new_duration(hour = t1[1] - t2[1], minute = t1[2] - t2[2], second
= t1[3] - t2[3])
}
as.duration(apply(x, 1, function(m) parseDuration(m[1], m[2])))
This could likely be made cleaner -- I don't know lubridate well.
Hope this helps,
Michael
On Thu, Mar 29, 2012 at 7:57 AM, drr <daniel.roj at wp.pl>
wrote:> Hi All,
>
> I have a data frame:
>
> ? ? ? ? ? ? ?Time1 ? ?Time2
> ? ? 1 ?176:46:10 ? ?41:48:06
> ? ? 2 ?171:28:57 ? ?61:19:10
> ? ? 3 ?178:25:15 ? ?34:05:35
> ? ? 4 ? 74:04:20 ? ? 25:01:55
> ? ? 5 ?136:11:20 ? ?37:59:32
> ? ? 6 ?138:17:17 ? ?30:22:27
> ? ? 7 ?183:04:48 ? ?29:25:02
> ? ? 8 ?179:35:01 ? ?19:29:44
>
>> str(df)
> 'data.frame': ? 8 obs. of ?2 variables:
> ?$ Time1: Factor w/ 583 levels "","00:00:01",..: 574
573 575 583 565 566 579
> 577
> ?$ Time2: Factor w/ 1298 levels
"00:00:00","00:00:01",..: 1292 1297 1288
> 1281 1290 1286 1284 1279
>
> I would like to make calculations (adding, summing) on this data. How do I
> transform those factors into duration data (in format hh:mm:ss). ?I have
> already found *lubridate* package but it does not work with factors. I
tried
> to convert as numeric, but it never works for me.
>
> How do I do that?
>
> --
> View this message in context:
http://r.789695.n4.nabble.com/Adding-duration-hh-mm-ss-Converting-factor-column-into-duration-class-tp4515210p4515210.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.