当前位置: 首页 > 知识库问答 >
问题:

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

齐典
2023-03-14
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

有没有自定义这个,这样我们就可以使用不同的功能?例如,Sum:

itersum(x)
# 3 3 4 14 18 12

共有1个答案

奚光霁
2023-03-14

在基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

为了让您了解更多信息,下面是如何根据filter重写diffcumsum函数:

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)
 类似资料:
  • 对于一个Box2D组合,我需要这段代码来避免无意中的点击: null null 目前,它适用于整个文档。但我希望它仅适用于 。 怎么可能编码呢? 会非常感谢你的帮助!

  • 我想写一个函数,迭代通过一个帐户列表,每个帐户都有一个相关联的值,并分配该帐户与名称列表中的一个名称。名称列表将有相关联的值,我希望分配的名称是具有最小值的名称。 我想的是迭代帐户列表,看看名字列表。首先看acc1,将其分配给名字列表的最小值。acc1的名字变成杰西卡,杰西卡的总价值被acc1值增强...杰西卡变成27,然后acc2去杰西卡再次使杰西卡35,acc3然后找到马特谁是现在的最小,并相

  • 在包中,我们可以表示一个(严格正的)代数数据类型 null 所以我的问题是:为什么和作为单独的类?什么时候数据类型只能是其中一种还是另一种? 目前,我可以想象这对于抽象数据类型来说可能是有价值的,因为抽象数据类型只想提供折叠或展开接口,但是其他时候也是这样吗?

  • 我试图自学机器学习,我有一个类似的问题。 是否正确: 例如,如果我有一个输入矩阵,其中X1、X2和X3是三个数字特征(例如,假设它们是花瓣长度、茎长度、花长度,我试图标记样本是否是特定的花物种): 您将上表的第一个ROW(不是列)的向量输入到网络中,如下所示: 也就是说,将有三个神经元(第一个表行的每个值为1),然后随机选择w1、w2和w3,然后要计算下一列中的第一个神经元,您执行我描述的乘法,然

  • 我在pgsql上有一个名为(超过100万行)的表,但我也有很多重复项。我选择了3个字段:,,。 我想用和随机选择它们,所以我这样做是为了在我的PHP脚本中节省一些内存。 但我如何才能做到这一点,这样它只会给我一个名单,没有重复的名字。 例如,将返回,但不会返回。名称字段是最重要的,每次我选择时必须在列表中唯一,并且必须是随机的。 我试过使用,但它希望我在中或在一个加积函数中也有id和元数据,但我不

  • 问题内容: 我了解Oracle sysdate返回当前日期和时间。这对于timestamp或datetime列非常有用。 现在,假设我有一个仅DATE列。我应该在插入查询中使用哪些关键字? 假设我有一个“仅时间”列。我应该在插入查询中使用哪些关键字? 谢谢! 问题答案: Oracle中没有“仅DATE”列。DATE数据类型存储日期和时间。 如果您只关心日期,则可以: 这将使时间部分位于00:00: