这里有一些方法。全部换算成分钟。例如,第一个组件是"03:31"
即 3 * 60 + 31 = 211 分钟。 (1) 至(5) 不使用任何包。
1) %*%它通过阅读起作用data
转换为包含小时和分钟的 2 列数据框。将其转换为矩阵,以便可以将其矩阵乘以c(60, 1)
。最后,用c
.
c(as.matrix(read.table(text = data, sep = ":")) %*% c(60, 1))
[1] 211 737 989 592 241 540 389 257 282
2) with这种变化甚至更短。它创建相同的数据框,但然后简单地乘以第一列(V1
) 乘以 60 并将其添加到第二列 (V2
).
with(read.table(text = data, sep = ":"), 60*V1+V2)
[1] 211 737 989 592 241 540 389 257 282
3)复杂这会将每个分量转换为复数,然后对实部和虚部执行所需的算术:
data_c <- as.complex(sub(":(\\d+)", "+\\1i", data))
60 * Re(data_c) + Im(data_c)
## [1] 211 737 989 592 241 540 389 257 282
3a)(3) 的这种变体也有效并且避免了正则表达式:
data_c <- as.complex(paste0(chartr(":", "+", data), "i"))
60 * Re(data_c) + Im(data_c)
## [1] 211 737 989 592 241 540 389 257 282
4) eval这会将每个分量转换为算术表达式,该算术表达式计算为分钟数,然后执行计算。使用eval
当你可以避免它时,并不真正推荐它,所以这个不太可取:
sapply(parse(text = sub("(\\d+):", "60*\\1+", data)), eval)
## [1] 211 737 989 592 241 540 389 257 282
5) POSIXlt我们可以转换为"POSIXlt"
类,然后使用hour
and min
成分:
with(unclass(as.POSIXlt(data, format = "%H:%M")), 60 * hour + min)
## [1] 211 737 989 592 241 540 389 257 282
6) chron使用 chron 包,我们可以粘贴秒数,转换为"times"
类,然后转换为分钟:
library(chron)
24 * 60 * as.numeric(times(paste0(data, ":00")))
## [1] 211 737 989 592 241 540 389 257 282
7) 润滑使用 lubridate 包我们可以使用hm
然后用数字给出秒,最后除以 60 得到分钟:
as.numeric(hm(data)) / 60
## [1] 211 737 989 592 241 540 389 257 282