I have a dataset which contains the timing of events in football. A game exceeds 60 minutes, and I\'m trying to calculate intervals. This is the data I have:
dat
This might work too
data1 <- c("11:14", "17:27", "25:34", "39:17", "39:59", "42:32", "50:15", "50:53", "64:22", "67:39")
data2 = sapply(strsplit(data1,":"), # from http://stackoverflow.com/a/5187350/7128934
function(x) {
x <- as.numeric(x)
x[1]+x[2]/60
}
)
difference = list()
for (i in 1: (length(data1) - 1)) {
difference[i] = data2[i+1] - data2[i]
}
Look into lubridate for this kind of thing.
There's probably an easier way to do it, but this works:
library(lubridate)
data <- c("11:14", "17:27", "25:34", "39:17", "39:59", "42:32", "50:15", "50:53", "64:22", "67:39")
out <- seconds_to_period(diff(as.numeric(ms(data)))
If you want the output as a formatted string instead of a period, use sprintf:
sprintf('%02d:%02d', minute(out), second(out))
Another base R attempt using as.difftime
to specify the units explicitly:
out <- diff(sapply(strsplit(data, ":"), function(x)
Reduce(`+`, Map(as.difftime, as.numeric(x), units=c("mins","secs"))))
)
# time difference in seconds
out
#[1] 373 487 823 42 153 463 38 809 197
# formatted string
sprintf("%d:%02d", out %/% 60, out %% 60)
#[1] "6:13" "8:07" "13:43" "0:42" "2:33" "7:43" "0:38" "13:29" "3:17"