R中的diff函數返回適當的滯後和迭代差異。迭代和滯後函數類似於R中的差異,但不僅僅是差異?
x = c(1, 2, 1, 3, 11, 7, 5)
diff(x)
# [1] 1 -1 2 8 -4 -2
diff(x, lag=2)
[1] 0 1 10 4 -6
是否有定製這個,以便我們可以使用差異以外的功能?例如,總和:
itersum(x)
# 3 3 4 14 18 12
R中的diff函數返回適當的滯後和迭代差異。迭代和滯後函數類似於R中的差異,但不僅僅是差異?
x = c(1, 2, 1, 3, 11, 7, 5)
diff(x)
# [1] 1 -1 2 8 -4 -2
diff(x, lag=2)
[1] 0 1 10 4 -6
是否有定製這個,以便我們可以使用差異以外的功能?例如,總和:
itersum(x)
# 3 3 4 14 18 12
您可以使用zoo::rollapply
require(zoo)
x <- c(1, 2, 1, 3, 11, 7, 5)
rollapply(x, width = 2, FUN = sum)
## [1] 3 3 4 14 18 12
爲了記錄在案,我問這個問題弄清楚如何註冊登錄數的矢量的變化,得益於@dickoa「的回答,我知道了這樣做的方法:
require(zoo)
equals = function(x) all(diff(x) == 0)
x = c(2, 3, -1, 3, -2, -5)
y = sign(x)
rollapply(y, 2, equals)
[1] TRUE FALSE FALSE FALSE TRUE
在基礎R,有filter
功能。它不如zoo::rollapply
那樣友好和一般,但速度非常快。在你的情況,你正在尋找應用與權重c(1, 1)
卷積濾鏡:
itersum <- function(x, n = 2) tail(filter(x, rep(1, n)), sides = 1), -(n-1))
itersum(x)
# 3 3 4 14 18 12
給你更多的想法,這裏是如何的diff
和cumsum
功能可以重新寫在filter
方面:
diff <- function(x) head(filter(x, c(1, -1)), -1)
cumsum <- function(x) filter(x, 1, method = "recursive")
一般來說,如果你正在尋找卷一個二元函數,然後head
和tail
可能是最容易的d去,因爲它會利用矢量化功能最快的方法:
itersum <- function(x) tail(x, -1) + head(x, -1)
diff <- function(x) tail(x, -1) - head(x, -1)
sign.change <- function(x) tail(sign(x), -1) != head(sign(x), -1)
'頭(Y,-1)==尾(Y,-1)'會無限快它總是值得(或接近)。在你的原始問題中陳述你的初始意圖。事實上,你應該編輯你的問題,而不是將其作爲答案。 – flodel
對,對不起,我會照你下次說的去做。 – qed