gpt4 book ai didi

r - 类似于 R 中的 diff 的迭代和滞后函数,但不仅仅是差异?

转载 作者:行者123 更新时间:2023-12-04 10:27:47 25 4
gpt4 key购买 nike

R 中的 diff 函数返回适当的滞后和迭代差异。

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 中,有 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

为了给你更多的想法,这里是如何 diffcumsum函数可以按照 filter 重写:
diff   <- function(x) head(filter(x, c(1, -1)), -1)
cumsum <- function(x) filter(x, 1, method = "recursive")

一般来说,如果你想滚动一个二元函数,那么 headtail可能是最简单和最快的方法,因为它将利用矢量化函数:
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)

关于r - 类似于 R 中的 diff 的迭代和滞后函数,但不仅仅是差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17909189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com