"Cumulative difference" R 中的函数
"Cumulative difference" function in R
是否有预先存在的函数来计算相应值之间的累积差异?
上下文:这是为了估计一个人在CycleStreet.net产生的旅程中必须在两个方向上经历的高度变化。
可重现的例子:
x <- c(27, 24, 24, 27, 28) # create the data
方法一:for循环
for(i in 2:length(x)){ # for loop way
if(i == 2) cum_change <- 0
cum_change <- Mod(x[i] - x[i - 1]) + cum_change
cum_change
}
## 7
方法二:向量化
diffs <- Mod(x[-1] - x[-length(x)]) # vectorised way
sum(diffs)
## 7
两者似乎都有效。我只是想知道在 base R 中是否还有另一个(更通用的)实现,或者像 dplyr 或 RcppRoll.
这比你拥有的要短:
sum(abs(diff(x)))
它等同于您的第二个解决方案,除了使用 diff
计算差异,并使用 abs
而不是 Mod
,因为输入是实数(没有虚部)。
是否有预先存在的函数来计算相应值之间的累积差异?
上下文:这是为了估计一个人在CycleStreet.net产生的旅程中必须在两个方向上经历的高度变化。
可重现的例子:
x <- c(27, 24, 24, 27, 28) # create the data
方法一:for循环
for(i in 2:length(x)){ # for loop way
if(i == 2) cum_change <- 0
cum_change <- Mod(x[i] - x[i - 1]) + cum_change
cum_change
}
## 7
方法二:向量化
diffs <- Mod(x[-1] - x[-length(x)]) # vectorised way
sum(diffs)
## 7
两者似乎都有效。我只是想知道在 base R 中是否还有另一个(更通用的)实现,或者像 dplyr 或 RcppRoll.
这比你拥有的要短:
sum(abs(diff(x)))
它等同于您的第二个解决方案,除了使用 diff
计算差异,并使用 abs
而不是 Mod
,因为输入是实数(没有虚部)。