建议使用hms包的替代方法,将数字转换为MM:SS,从而提供与difftime不同的类。
以下面的示例为例,我想将data.frame(当前以毫秒为单位)中的变量y转换为时间格式MM:SS以获得更高的总和。
library(hms)
x <- c('a','b')
y = c(256733,249800)
z <- data.frame(x,y)
z$y <- z$y/1000
z$y <- as.hms(z$y)
class(z$y)
sum(z$y)
当前返回...
时差506.533秒
时间变量应最终为:
04:16 04:09
sum(z $ y)= 08:26
答案 0 :(得分:0)
您可以使用lubridate软件包。 dplyr软件包仅用于简化数据操作。
library(lubridate)
library(dplyr)
# 1 milisecond = 0.001 second
mili_sec <- 0.001
x <- c('a','b')
y <- c(256733,249800)
z <- data.frame(x,y)
z <- z %>%
dplyr::mutate(y = y*mili_sec,
y = lubridate::seconds_to_period(y),
y = lubridate::parse_date_time(y, "%M %S"),
H = base::format(y,"%M"),
S = base::format(y,"%S"))
z
> z
x y H S
1 a 0000-01-01 00:04:17 04 17
2 b 0000-01-01 00:04:10 04 10
endM <- sum(as.numeric(z$H))
endS <- sum(as.numeric(z$S))
base::format(lubridate::parse_date_time(paste(endM, endS), "%M %S"), "%M:%S")
[1] "08:27"
答案 1 :(得分:0)
另一个选择是使用lubridate::dmilliseconds
z$y1 <- dmilliseconds(z$y)
x y y1
1 a 256733 256.733s (~4.28 minutes)
2 b 249800 249.8s (~4.16 minutes)
> sum(z$y1)
[1] 506.533
使用seconds_to_period
将y1
转换为MM:SS格式。