R函数用于时差计算

时间:2015-05-21 14:21:48

标签: r diff

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

function changeDate(obj) {
        if(obj.value == "TOD"){
            today = new Date();
            todayFormat = today.getDate() + "/" + (today.getMonth() + 1) + "/" + today.getFullYear().toString();
            document.getElementById("fromdate").value = todayFormat;
            document.getElementById("todate").value = todayFormat;                              
        }
}

为什么它会以这种格式给我一个错误?:

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)) 
})

1 个答案:

答案 0 :(得分:3)

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

  

替换元素1有25584行,需要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