如何对引用i + 1或i-1索引的数组元素执行数学运算?

时间:2015-06-03 22:08:33

标签: r dplyr

我几乎可以用任何语言编写以下代码。 subtractPrevious接受一个数组并从i+1值中减去i个st值。如何使用R进行此类计算?这似乎是lapplydplyr函数的工作。

x <- c(1,2,3,4,5,6,7,8,9,10)
subtractPrevious <- function(x){
    for (i in 1:length(x)){
       if (i == 1) {
           y[1] <- NA
       } else {
           y[i] <- x[i] - x[i-1]
       }
    }
    return(y)
}

y <- subtractPrevious(x)

2 个答案:

答案 0 :(得分:5)

这里有一个内置函数diff

c(NA,diff(x))

答案 1 :(得分:4)

我用这个:

   y <- x - c(0,x[1:length(x)-1])

通过解释(如评论中的要求),我将0连接到通过将原始右移一个形成的新向量的前面(并且切掉掉掉边缘的最后一个元素)。

好处是它只使用核心R并推广到其他情况(如问题标题中所要求的)。因此,例如,如果我想减去后续值,我可以执行以下操作:

   y <- x - c(x[2:length(x)],0)

我一直用这些东西来引用滞后变量,差异等等......