R中的时间算术

时间:2014-03-31 10:43:28

标签: r

enter image description here

 dt$st<- substr(strptime(dt$LoginTime, format = "%H:%S"),12,20)

使用上面的代码,我已经提取了字符格式的时间,我希望对它进行算术运算。例如,如果我想将一列数字与上面的列相乘,我该怎么做?

LoginTime列的结构是:

structure(c(1505L, 231L, 1606L, 757L, 139L, 702L), .Label = c("0:00:01", 
"0:00:05", "0:00:06", "0:00:07", "0:00:10", "0:00:12", "0:00:13", 9:56:01", 
"9:56:31", "9:57:11", "9:57:39", "9:58:37"), class = "factor")

2 个答案:

答案 0 :(得分:1)

看起来你有时间而不是时间。你可以使用package lubridate:

x <- factor(c("0:00:13", "9:56:01"))

library(lubridate)
y <- hms(x)
#[1] "13S"       "9H 56M 1S"

但是,请阅读help("period")

  

在Period对象中,时间单位没有固定长度(除了   几秒钟),直到它们被添加到日期时间。每个的长度   时间单位将取决于添加日期时间。对于   例如,从2009-01-01开始的一年将是365天。一个   从2012-01-01开始的一年将是366天。当数学是   使用句点对象执行,每个单元单独应用。怎么样   一个时期的长度在其单位之间分配是非平凡的。   例如,当闰秒发生时,1分钟长于60   秒。

y*3
#[1] "39S"         "27H 168M 3S"

答案 1 :(得分:1)

看起来您可以通过对代码的小调整来进行一些计算。 例如

计算平均值

substr(mean(strptime(dt$LoginTime, format = "%H:%S")), 12, 20)

每行添加10秒

substr(strptime(dt$LoginTime, format = "%H:%S") + 10, 12, 20)

为每一行添加一分钟

substr(strptime(dt$LoginTime, format = "%H:%S") + 60, 12, 20)

添加一小时

substr(strptime(dt$LoginTime, format = "%H:%S") + 3600, 12, 20)

添加两个小时

substr(strptime(dt$LoginTime, format = "%H:%S") + 7200, 12, 20)