用于时差计算的R函数

R function for time difference calculation

我有这个函数来计算连续 date/times 秒的差异。它工作正常,但我想了解为什么我需要第一行:

padded.diff <- function(x) c(0L, diff(x)) 

df2=within(df, {
  date        <- strptime(Last.Modified.Date, format="%d.%m.%Y %H:%M:%S")
  date.diff   <- padded.diff(as.numeric(date)) 
})

为什么在这种格式下会报错?:

df2=within(df, {
  date        <- strptime(Last.Modified.Date, format="%d.%m.%Y %H:%M:%S")
  date.diff   <- diff(as.numeric(date)) 
})

错误如下:

Error in `[<-.data.frame`(`*tmp*`, nl, value = list(date.diff = c(3, 56,  : 
  replacement element 1 has 25584 rows, need 25585

如果您对长度为 n 的输入向量求差 d_i = x_i - x_(i-1),则结果将是长度为 n-1 的向量;或者更一般地,diff(x, lag = k) 导致长度等于 length(x)-k 的向量。您收到的错误消息,

replacement element 1 has 25584 rows, need 25585

表示您试图用仅 25584 个元素替换 25585 长度的向量。 padded.diff 只是添加一个整数值(0L,这是非常传统的)来解决这种长度差异。不过,您可能会考虑更通用的 padded.diff 版本,以防您需要 lag > 1

pad.diff <- function(x, n = 1) c(rep(0L,n), diff(x, lag = n))
##
x <- (1:5)**2
##
R> diff(x)
#[1] 3 5 7 9
##
R> pad.diff(x)
#[1] 0 3 5 7 9
##
R> pad.diff(x, 2)
#[1]  0  0  8 12 16