我有一个关于从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" ..
答案 0 :(得分:0)
我假设 TIMEOUT最初引用期间,观察回合中的'break',在某种程度上已转换为POSIXct
。所以现在它似乎是一个约会。好吧,鉴于我的猜测与现实有任何关系,你可以尝试这样的事情。在这里,我使用包hour
中的函数minute
和lubridate
来提取'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'中有额外的时间单位,则需要调整,例如秒或天。