【问题标题】:"Cumulative difference" function in RR中的“累积差异”功能
【发布时间】:2016-03-16 13:14:06
【问题描述】:

是否有一个预先存在的函数来计算结果值之间的累积差异?

上下文:这是估计一个人在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 这样的实现。

【问题讨论】:

    标签: r window-functions cumsum


    【解决方案1】:

    这比你拥有的要短:

    sum(abs(diff(x)))
    

    这等效于您的第二个解决方案,除了使用diff 计算差异,以及使用abs 而不是Mod,因为输入是实数(没有虚部)。

    【讨论】:

    • R 太棒了——函数的无缝连接让我想起了 unix 管道。这让我觉得这是另一种有用(虽然不太简洁)的表示方式:x %>% diff() %>% abs() %>% sum()
    • 在某些情况下管道可以提高可读性,但我认为这不是其中之一。
    • 同意 -> 一个人可以被管道冲昏头脑!
    • 嘿。这是否也适用于 ">%%" 的 maggitr/tidyverse 使用?
    • @42- 我仍然不是管道所有东西的粉丝,但也许我会回来。
    猜你喜欢
    • 2022-10-02
    • 1970-01-01
    • 2020-08-27
    • 2022-07-24
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 2021-04-07
    相关资源
    最近更新 更多