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.