基本上我在R数据帧中有一个列,我想找到一个代码来计算以下函数:
(i - (i-1)) - ((i+1) - i)
换句话说,对于函数的左侧,我想从(i-1)
中减去前一行i
的值,而对于函数的右侧,我想减去{{ 1}}来自下一行i
如果有人能提供帮助,我们将不胜感激。
答案 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