基本上我在 R 数据框中有一列,我想找到一个代码来计算以下函数:
(i - (i-1)) - ((i+1) - i)
换句话说,对于函数的左侧,我想从 中减去前一行的值,(i-1)
对于i
函数的右侧,我想i
从下一行的值中减去(i+1)
如果有人可以提供帮助,将不胜感激。
基本上我在 R 数据框中有一列,我想找到一个代码来计算以下函数:
(i - (i-1)) - ((i+1) - i)
换句话说,对于函数的左侧,我想从 中减去前一行的值,(i-1)
对于i
函数的右侧,我想i
从下一行的值中减去(i+1)
如果有人可以提供帮助,将不胜感激。
像这样?
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
还是像这样?边界上应该发生什么?
x <- (1:5)^2
-diff(diff(x))
# [1] -2 -2 -2
你的描述不清楚。如果a
是一个向量,您所要求的将由以下人员提供:
f <- diff(a[-length(a)]) - diff(a[-1])
并且将被定义为 1 < i < length(a),因此 length(f) = length(a) - 2
将 a 替换为您的 data.frame 列。
我以前也有过类似的情况。理想情况下,您应该坚持使用矢量化代码,因为它要快得多。我所做的是创建两个新向量,一个将所有内容向上移动一个 (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