我有一个数据框,其中有一列名为“时间”(具有整数类)。时间以三位或四位数字表示,例如514,表示上午5:14,或1914,表示19:14。我需要创建一个新列“ time_2”,该列将具有“时间”列的时间,但仅显示分钟。例如,如果第1行的“时间”列的值为“ 514”,则需要转到第一个值为“ 314”分钟的名为“ time_2”的新列。
我试图“删除”第一个数字,然后将其乘以60,随后的两个数字将其相加。但是,我无法做到这一点,而且还有四位数的数据使我停下来寻求帮助。我只是不知道该怎么做。我非常感谢您的帮助。
(语言:R)
答案 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"))