将数据帧和向量值作为函数的参数传递

时间:2013-12-04 03:25:01

标签: r apply

对于数据框的每一行,我想计算在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,但如何将参数作为参数使用?

1 个答案:

答案 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")

mapplyFUN应用于每个...参数的第一个元素,第二个元素,第三个元素,依此类推。如有必要,可以回收参数。 MoreArgsFUN的其他参数列表。

mapply(FUN = calcFreqTimeInterval, startTime = df$start, endTime = df$end, MoreArgs = list(timestampVector = timestamp))
## [1] 3 2