R函数用于计算时间差

4

我有一个用于计算连续日期/时间差异的函数,它运行良好,但我想了解为什么需要第一行:

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
1个回答

4
如果你正在获取长度为n的输入向量的差异d_i = x_i - x_(i-1),结果将是一个长度为n-1的向量;更一般地,diff(x, lag = k) 的结果是一个长度等于length(x)-k的向量。你得到的错误消息
替换元素1有25584行,需要25585
意味着你试图用只有25584个元素的向量来替换一个长度为25585的向量。padded.diff只是添加了一个单独的整数值(0L,这是相当常规的),以解决长度差异的问题。但是,如果你需要lag>1,你可能需要考虑一个更通用的版本的padded.diff:
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接