这里有一些方法。全部转换为分钟。例如,第一个组件是"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) 与 这种变化甚至更短。它创建了相同的数据框,然后简单地将第一列 (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 和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 使用 lubridate 包,我们可以使用 hm 将其转换为数字,给出秒,最后除以 60 得到分钟:
as.numeric(hm(data)) / 60
## [1] 211 737 989 592 241 540 389 257 282