如何计算两行之间的差异

时间:2013-01-08 18:28:28

标签: r

基本上我在R数据帧中有一个列,我想找到一个代码来计算以下函数:

(i - (i-1)) - ((i+1) - i)

换句话说,对于函数的左侧,我想从(i-1)中减去前一行i的值,而对于函数的右侧,我想减去{{ 1}}来自下一行i

的值

如果有人能提供帮助,我们将不胜感激。

4 个答案:

答案 0 :(得分:8)

喜欢这个吗?

x <- (1:5)^2
#[1]  1  4  9 16 25
as.vector(filter(x,c(-1,2,-1),sides=1))    
#[1] NA NA -2 -2 -2

答案 1 :(得分:8)

或者喜欢这个? 边境会发生什么?

x <- (1:5)^2
-diff(diff(x))
# [1] -2 -2 -2

答案 2 :(得分:2)

您的描述不明确。如果a是一个向量,那么您所要求的将是:

f <- diff(a[-length(a)]) - diff(a[-1])

并将定义为1&lt;我&lt;长度(a),因此长度(f)=长度(a)-2

将a替换为data.frame列。

答案 3 :(得分:0)

我之前有类似的情景。理想情况下,你应该坚持使用矢量化代码,因为它的速度要快得多。我所做的是制作两个新的向量,一个向上移动一个(i-1)或向下移一个(i + 1),然后在计算中使用它们:

i <- (1:5)^2

i.next     <- c(i[2:length(i)],NA)
i.previous <- c(NA,i[1:length(i)-1])

i.calculation <- (i - i.previous) - (i.next - i)

cbind(i,i.next,i.previous,i.calculation)

# i i.next i.previous i.calculation
# [1,]  1      4         NA            NA
# [2,]  4      9          1            -2
# [3,]  9     16          4            -2
# [4,] 16     25          9            -2
# [5,] 25     NA         16            NA