我有一个问题,我不确定我在这里是完全愚蠢的,还是这是一个真正的问题,或者我误解了这些函数的作用。
diff的反义词和cumsum是一样的吗?我以为是。但是,使用这个例子:
dd <- c(17.32571,17.02498,16.71613,16.40615,
16.10242,15.78516,15.47813,15.19073,
14.95551,14.77397)
par(mfrow = c(1,2))
plot(dd)
plot(cumsum(diff(dd)))
> dd
[1] 17.32571 17.02498 16.71613 16.40615 16.10242 15.78516 15.47813 15.19073 14.95551
[10] 14.77397
> cumsum(diff(dd))
[1] -0.30073 -0.60958 -0.91956 -1.22329 -1.54055 -1.84758 -2.13498 -2.37020 -2.55174
这不一样我哪里做错了
啊!星期五。
很明显
5条答案
按热度按时间xeufq47z1#
功能有很大的不同:
diff(x)
返回长度为(length(x)-1)
的向量,该向量包含向量x
中一个元素与下一个元素之间的差,而cumsum(x)
返回长度等于x
的向量,该向量包含x
中元素的和示例:
函数
cumsum()
是累积和,因此它返回的向量v[i]
的条目是x
中x[1]
和x[i]
之间所有元素的结果。相比之下,diff(x)
只取一个元素x[i]
和下一个元素x[i+1]
之间的差。cumsum
和diff
的组合会导致不同的结果,具体取决于函数的执行顺序:这里的结果是九个“1”的序列的累积和。注意,如果将该结果与原始向量
x
进行比较,则最后一个条目10
丢失。另一方面,通过计算
获得一个矢量,该矢量再次类似于原始矢量
x
,但是现在第一个条目1
丢失。在任何情况下,原始矢量都不会被恢复,因此不能说
cumsum()
是diff()
的相反或反函数qoefvg9y2#
你忘了考虑第一个因素的影响
dd == c(dd1,dd1 + cumsum(diff(dd)))
6ovsh4lw3#
@RHertel很好地回答了这个问题,指出
diff()
返回一个带有length(x)-1
的向量。因此,另一个简单的解决方法是将
0
添加到原始向量的开头,以便diff()
计算x[1]
和0
之间的差值。这样,可以使用
diff()
和c()
作为cumsum()
的逆表示jhkqcmku4#
如果你知道“滞后”和“差异”的价值。
ctrmrzij5#
Cumsum不是diff的反义词。diff的反义词是离散积分(diff的逆)。它与cumsum有一点点不同:函数如下:diffinv(x)
让我们用你的数据做一个例子:
结果向量几乎相同,但diffinv()结果从0开始。
如果我运行你的脚本,并将简单的 dd 调用与 cumsum(diff(dd)) 或 diffinv(diff(dd)) result进行比较,它们是非常不同的。
但是如果你**像这样颠倒函数的顺序,你会得到一个结果,这个结果与(假设)预期的结果相似:
请注意,在这个例子中,diff(diffinv(dd)) 给出的结果与简单的 dd 调用相同,而不是使用 cumsum() 的函数调用。