对于数据框的每一行,我想计算在start
列和end
列中指定的日期时间之间发生的事件数。
请考虑以下功能
calcFreqTimeInterval <- function (startTime, endTime, timestampVector) {
sum(timestampVector >= startTime & timestampVector <= endTime)
}
作为我想要的功能的参数
df <- data.frame(start=c("06/11/2013 10:00:00","06/11/2013 17:30:00"), end=c("06/11/2013 11:15:00","06/11/2013 17:45:00"))
timestamp <- as.POSIXlt(c("2013-11-06 10:30:19","2013-11-06 10:32:19","2013-11-06 11:00:19", "2013-11-06 17:40:50","2013-11-06 17:42:50"))
分别。使用
将列转换为Posix后df$start <- as.POSIXlt((df$start), format="%d/%m/%Y %H:%M:%S")
df$end <- as.POSIXlt((df$end), format="%d/%m/%Y %H:%M:%S")
我想获得结果
expectedResult <- c(3,2)
如果我的参数都在df中,我应该能够使用apply
,但如何将参数作为参数使用?
答案 0 :(得分:0)
您需要使用mapply
。在此之前,您需要使用POSIXct
类而不是POSIXlt
类。
df <- data.frame(start=c("06/11/2013 10:00:00","06/11/2013 17:30:00"), end=c("06/11/2013 11:15:00","06/11/2013 17:45:00"))
timestamp <- as.POSIXct(c("2013-11-06 10:30:19","2013-11-06 10:32:19","2013-11-06 11:00:19", "2013-11-06 17:40:50","2013-11-06 17:42:50"))
df$start <- as.POSIXct((df$start), format="%d/%m/%Y %H:%M:%S")
df$end <- as.POSIXct((df$end), format="%d/%m/%Y %H:%M:%S")
mapply
将FUN
应用于每个...参数的第一个元素,第二个元素,第三个元素,依此类推。如有必要,可以回收参数。 MoreArgs
是FUN
的其他参数列表。
mapply(FUN = calcFreqTimeInterval, startTime = df$start, endTime = df$end, MoreArgs = list(timestampVector = timestamp))
## [1] 3 2