我在df1
中有一列,它以几个月的时间总结了格式为“%Y-%m-%d%H:%M:%S”的日期时间。我想为每个日期时间提取一天中的分钟。即,对于时间“ 00:43:43”,一天的分钟将为“ 43”,对于日期时间“ 02:24:58”,一天的分钟将对应于“ 144”。一天中的分钟必须在1到1440之间。
我添加了代码以复制示例:
df<-data.frame(Datetime=c("2019-07-03 00:43:43", "2019-07-03 02:24:58"))
df$Datetime<- as.POSIXct(df$Datetime, formtat="%Y-%m-%d %H:%M:%S",tz="UTC")
df
Datetime
1 2019-07-03 00:43:43
2 2019-07-03 02:24:58
有人知道怎么做吗?
预先感谢
答案 0 :(得分:3)
一个选项是
library(lubridate)
round(period_to_seconds(hms(v1))/60)
如果我们不想round
sub("\\..*", "", period_to_seconds(hms(v1))/60)
#[1] "43" "144"
在OP的初始帖子中,显示的格式为%H:%M:%S
,因此我们使用了hms
。在显示示例的情况下,它将为ymd_hms
v2 <- sub(".*\\s", "", df$Datetime)
sub("\\..*", "", period_to_seconds(hms(v2))/60)
#[1] "43" "144"
v1 <- c("00:43:43", "02:24:58")
答案 1 :(得分:2)
一种选择是使用format
将日期时间格式化为表达式,然后对其求值。
sapply(format(df$Datetime, '%H*60 + %M'), function(x) eval(parse(text = x)))
# 00*60 + 43 02*60 + 24
# 43 144