将数据帧中以三到四位数字表示的小时和分钟转换为分钟

时间:2019-06-20 03:44:49

标签: r dataframe time

我有一个数据框,其中有一列名为“时间”(具有整数类)。时间以三位或四位数字表示,例如514,表示上午5:14,或1914,表示19:14。我需要创建一个新列“ time_2”,该列将具有“时间”列的时间,但仅显示分钟。例如,如果第1行的“时间”列的值为“ 514”,则需要转到第一个值为“ 314”分钟的名为“ time_2”的新列。

我试图“删除”第一个数字,然后将其乘以60,随后的两个数字将其相加。但是,我无法做到这一点,而且还有四位数的数据使我停下来寻求帮助。我只是不知道该怎么做。我非常感谢您的帮助。

(语言:R)

3 个答案:

答案 0 :(得分:0)

将数字转换为timestamp,并使用substr

提取小时和分钟。
library("lubridate")

InPut
time <- c(521,1914)
time <- substr(as.POSIXct(sprintf("%04.0f", time), format='%H%M'), 12, 16) # Extracting hours and minutes using substr
time <- as.POSIXct(x = time, format = "%H:%M", tz = "UTC")
hour(time) * 60 + minute(time)

OutPut:
[1]  321 1154

答案 1 :(得分:0)

如果您的时间永远不在00:00-23:59窗口之外,则可以使用基于R的as.difftime

x <- c(514,1914)

as.difftime(sprintf("%04d", x), format="%H%M", units="mins")
#Time differences in mins
#[1]  314 1154

这个范围之外的时间可以用一点算术处理:

as.numeric(
  as.difftime(x %/% 100 + (x %% 100)/60, units="hours"),
  units="mins"
)
#[1]  314 1154

答案 2 :(得分:0)

以更简单的方式:

library(lubridate)
time <- c(521,1914)
60 *hour(parse_date_time(time, "HM"))+ minute(parse_date_time(time, "HM"))