我几乎可以用任何语言编写以下代码。 subtractPrevious
接受一个数组并从i+1
值中减去i
个st值。如何使用R进行此类计算?这似乎是lapply
或dplyr
函数的工作。
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)
答案 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)
我一直用这些东西来引用滞后变量,差异等等......