2

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

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

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

如果有人可以提供帮助,将不胜感激。

4

4 回答 4

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
于 2013-01-08T18:39:03.653 回答
8

还是像这样?边界上应该发生什么?

x <- (1:5)^2
-diff(diff(x))
# [1] -2 -2 -2
于 2013-01-08T18:41:30.833 回答
2

你的描述不清楚。如果a是一个向量,您所要求的将由以下人员提供:

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

并且将被定义为 1 < i < length(a),因此 length(f) = length(a) - 2

将 a 替换为您的 data.frame 列。

于 2013-01-08T18:44:11.720 回答
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
于 2013-01-08T18:41:44.110 回答