cum r中diff的反义词

Emm*_*bbs 2 r

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

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
Run Code Online (Sandbox Code Playgroud)

这些不一样。我哪里出问题了?

啊!星期五。

明显

RHe*_*tel 5

函数是完全不同的: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
Run Code Online (Sandbox Code Playgroud)

该函数cumsum()是累加和,因此v[i]它返回的向量的条目是和x之间所有元素的结果。相反,仅取一个元素与下一个元素之间的差。x[1]x[i]diff(x)x[i]x[i+1]

的组合cumsumdiff导致不同的结果,这取决于在该功能被执行的顺序:

> cumsum(diff(x))
# 1 2 3 4 5 6 7 8 9
Run Code Online (Sandbox Code Playgroud)

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

另一方面,通过计算

> diff(cumsum(x))
# 2  3  4  5  6  7  8  9 10
Run Code Online (Sandbox Code Playgroud)

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

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