我有一个问题,我不确定我是否在这里完全愚蠢,或者这是否是一个真正的问题,或者我是否误解了这些功能的作用。

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

这些不太一样。我哪里错了?

啊!星期五。

明显地

最佳答案

函数完全不同: diff(x) 返回一个长度为 (length(x)-1) 的向量,其中包含向量 x 中一个元素和下一个元素之间的差异,而 cumsum(x) 返回一个长度等于 x 长度的向量,其中包含 x 中元素的总和

例子:

x <- c(1:10)
#[1]  1  2  3  4  5  6  7  8  9 10
> diff(x)
#[1] 1 1 1 1 1 1 1 1 1
v <- cumsum(x)
> v
#[1]  1  3  6 10 15 21 28 36 45 55

函数 cumsum() 是累积和,因此它返回的向量 v[i] 的条目是 xx[1]x[i] 之间所有元素的结果。相比之下, diff(x) 只需要一个元素 x[i] 和下一个元素 x[i+1] 之间的差异。
cumsumdiff 的组合会导致不同的结果,这取决于函数的执行顺序:
> cumsum(diff(x))
# 1 2 3 4 5 6 7 8 9

这里的结果是九个“1”序列的累积和。请注意,如果将此结果与原始向量 x 进行比较,则缺少最后一个条目 10

另一方面,通过计算
> diff(cumsum(x))
# 2  3  4  5  6  7  8  9 10

获得一个再次类似于原始向量 x 的向量,但现在第一个条目 1 丢失了。

在任何情况下都没有恢复原始向量,因此不能说 cumsum()diff() 的相反或反函数

关于r - cumsum 与 r 中的 diff 相反,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32009610/

10-12 17:55