相关疑难解决方法(0)

自适应移动平均 - R中的最佳性能

我正在寻找R中滚动/滑动窗口函数方面的一些性能提升.这是一个非常常见的任务,可用于任何有序的观测数据集.我想分享一些我的发现,也许有人能够提供反馈,使其更快.
重要的是我专注于案例align="right"和自适应滚动窗口,因此width是一个向量(与我们的观察向量相同的长度).如果我们有width标量,那么已经有非常好的函数zooTTR包非常难以击败(4年后:它比我预期的要容易),因为其中一些甚至使用Fortran(但仍然是用户定义的)使用下面提到的FUN可以更快wapply.
RcppRoll由于其出色的性能,包值得值得一提,但到目前为止还没有能够回答这个问题的功能.如果有人可以扩展它以回答这个问题,那将会很棒.

考虑一下我们有以下数据:

x = c(120,105,118,140,142,141,135,152,154,138,125,132,131,120)
plot(x, type="l")
Run Code Online (Sandbox Code Playgroud)

大块make_x的情节

我们希望在x带有可变滚动窗口的矢量上应用滚动函数width.

set.seed(1)
width = sample(2:4,length(x),TRUE)
Run Code Online (Sandbox Code Playgroud)

在这种特殊情况下,我们将不得不滚动功能适应samplec(2,3,4).
我们将应用mean功能,预期结果:

r = f(x, width, FUN = mean)
print(r)
##  [1]       NA       NA 114.3333 120.7500 141.0000 135.2500 139.5000
##  [8] 142.6667 147.0000 146.0000 131.5000 128.5000 131.5000 127.6667
plot(x, type="l")
lines(r, col="red")
Run Code Online (Sandbox Code Playgroud)

大块make_results的情节

任何指标都可用于产生自width变量作为自适应移动平均线的不同变体或任何其他函数.

寻找最佳表现.

r zoo mapply rollapply data.table

16
推荐指数
3
解决办法
5555
查看次数

计算data.table中两行之间的距离

问题摘要:我正在使用Windows 7 PC上的(版本)data.table软件包(版本1.9.5)清理鱼类遥测数据集(即空间坐标随时间变化)R.一些数据点是错误的(例如,遥测设备拾取了回声).我们可以说这些点是错误的,因为鱼比生物可能的距离移动了更远的距离并且作为异常值脱颖而出.实际数据集包含来自30条单独鱼类的超过2,000,000行数据,因此使用了该data.table包.

我正在移除相距太远的点(即,行进的距离大于最大距离).但是,我需要重新计算在移除点之后在点之间行进的距离,因为2-3个数据点有时会在群集中被错误记录.目前,我有一个for循环来完成工作,但可能远非最佳,我知道我可能会错过包中的一些强大工具data.table.

作为技术说明,我的空间尺度足够小,欧几里德距离起作用,我的最大距离标准是生物学合理的.

我寻求帮助的地方:我已经查看了SO并找到了几个有用的答案,但没有一个完全符合我的问题.具体而言,所有其他答案仅将一列数据与行之间进行比较.

  1. 答案使用两行进行比较data.table,但仅查看一个变量.

  2. 这个答案看起来很有前途和用途Reduce,但我无法弄清楚如何使用Reduce两列.

  3. 这个答案使用了索引功能data.table,但我无法弄清楚如何将它与距离函数一起使用.

  4. 最后,这个答案证明了它的roll功能data.table.但是,我无法弄清楚如何使用这个函数的两个变量.

这是我的MVCE:

library(data.table)
## Create dummy data.table
dt <- data.table(fish = 1,
                 time = 1:6,
                 easting = c(1, 2, 10, 11, 3, 4),
                 northing = c(1, 2, 10, 11, 3, 4))
dt[ , dist := 0]

maxDist = 5 …
Run Code Online (Sandbox Code Playgroud)

r data.table

5
推荐指数
1
解决办法
1571
查看次数

在 data.table R 中按组滚动

我试图按组通过 data.table 滚动我的函数并遇到问题。不确定我应该更改我的功能还是我的调用错误。这是一个简单的例子:

数据

 test <- data.table(return=c(0.1, 0.1, 0.1, 0.1, 0.1, 0.2, 0.2, 0.2, 0.2, 0.2),
                   sec=c("A", "A", "A", "A", "A", "B", "B", "B", "B", "B"))
Run Code Online (Sandbox Code Playgroud)

我的职能

zoo_fun <- function(dt, N) {
  (rollapply(dt$return + 1, N, FUN=prod, fill=NA, align='right') - 1)
}
Run Code Online (Sandbox Code Playgroud)

运行它(我想创建新的列动量,这只是最新 ​​3 个观察值的乘积,每个观察值加一个(因此分组依据 = 秒)。

test[, momentum3 := zoo_fun(test, 3), by=sec]

    Warning messages:
    1: In `[.data.table`(test, , `:=`(momentum3, zoo_fun(test, 3)), by = sec) :
      RHS 1 is length 10 (greater than the size (5) of group 1). The …
Run Code Online (Sandbox Code Playgroud)

grouping r data.table

1
推荐指数
1
解决办法
2806
查看次数

标签 统计

data.table ×3

r ×3

grouping ×1

mapply ×1

rollapply ×1

zoo ×1