用于时差计算的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
我有这个函数来计算连续 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