在R中减去三个时间列

时间:2013-10-28 18:04:43

标签: r datetime time

我有一个关于从R中减去时间列的问题。我有三列我需要相互减去以获得总观察时间。我需要去做 (TIMEEND-TIMESTART)-TIMEOUT

当我使用OBSTIME <- difftime(pipers$TIMEEND, pipers$TIMESTART, units = "hours")时,我会得到第一部分,但是如何从中减去TIMEOUT。或者有没有办法同时减去所有三列?这甚至是正确的格式吗?

提前感谢您的帮助!

米歇尔

$ TIMESTART : POSIXct, format: "2013-10-28 10:30:00" "2013-10-28 14:50:00" "2013-10-28 14:50:00" ...
 $ TIMEEND   : POSIXct, format: "2013-10-28 12:30:00" "2013-10-28 16:50:00" "2013-10-28 16:50:00" ...
 $ TIMEOUT   : POSIXct, format: "2013-10-28 00:04:00" "2013-10-28 00:10:00" "2013-10-28 00:10:00" ..

1 个答案:

答案 0 :(得分:0)

假设 TIMEOUT最初引用期间,观察回合中的'break',在某种程度上已转换为POSIXct。所以现在它似乎是一个约会。好吧,鉴于我的猜测与现实有任何关系,你可以尝试这样的事情。在这里,我使用包hour中的函数minutelubridate来提取'out'对象的相关(我猜...)部分。

library(lubridate)

# using your first set of times/periods as example
end <- as.POSIXct("2013-10-28 12:30:00")
start <- as.POSIXct("2013-10-28 10:30:00")
out <- as.POSIXct("2013-10-28 00:04:00")

# calculate total duration as difference between 'end' and 'start', in units minutes
tot <- as.numeric(difftime(end, start, units = "mins")) 

# calculate break in minutes using hour and minute components extracted from 'out'.
out_min <- (hour(out) * 60 + minute(out))

# calculate net duration of observation
tot - out_min
# [1] 116

当然,如果在'TIMEOUT'中有额外的时间单位,则需要调整,例如秒或天。