R中如何更简便地将datetime对象转换为当日累计整数分钟
从datetime对象提取当日累计分钟整数的简化方案
示例数据结构
df <- structure(list(dttm = structure(c(-2209068000, -2209069200, -2209061520, -2209064100, -2209065240), tzone = "UTC", class = c("POSIXct", "POSIXt"))), row.names = c(NA, -5L), class = c("tbl_df", "tbl", "data.frame"))
原始数据预览:
# A tibble: 5 x 1 dttm <dttm> 1 1899-12-31 02:00:00 2 1899-12-31 01:40:00 3 1899-12-31 03:48:00 4 1899-12-31 03:05:00 5 1899-12-31 02:46:00
我们可以用以下两种更简洁的方案实现需求,无需引入hms、chron等额外依赖:
方案1:依赖lubridate(可读性最高)
直接提取时间的小时和分钟字段计算即可,仅需一行逻辑:
library(dplyr) library(lubridate) df <- df %>% mutate(dttm_min = hour(dttm) * 60 + minute(dttm))
方案2:纯Base R实现(零额外依赖)
不需要加载任何扩展包,用R原生时间处理逻辑即可实现:
# 方法A:通过POSIXlt属性提取时分计算 df$dttm_min <- as.POSIXlt(df$dttm)$hour * 60 + as.POSIXlt(df$dttm)$min # 方法B:通过当日零点的时间差计算 df$dttm_min <- as.integer(difftime(df$dttm, as.Date(df$dttm), units = "mins"))
输出验证
以上所有方案的输出结果和原实现完全一致:
# A tibble: 5 × 2 dttm dttm_min <dttm> <int> 1 1899-12-31 02:00:00 120 2 1899-12-31 01:40:00 100 3 1899-12-31 03:48:00 228 4 1899-12-31 03:05:00 185 5 1899-12-31 02:46:00 166
内容的提问来源于stack exchange,提问作者TarJae
相关产品推荐
相关产品推荐

