小编gis*_*jan的帖子

向量化方法,计算向量中左右邻居的均值

我有一个向量

x = c(1820.0, 2235.0, 2534.0, 2580.0, 2322.0, 2317.0, 2331.0, 2345.0, 
      2305.0, 2265.0, 2277.0, 2289.0, 2338.0, 2387.0, 2152.0, 2256.0, 
      2360.0, 2590.0, 2529.0, 2468.0, 2776.0, 2909.0, 3017.0, 3081.0,
      3118.5, 3156.0, 3338.0, 3211.5)
Run Code Online (Sandbox Code Playgroud)

我想计算除边缘以外的每个元素的左右邻居的平均值。例如,结果应如下所示: mean(1820,2534), mean(2235,2580), mean(2534,2322) ...

我可以使用循环来做到这一点,但这很慢。我需要向量化解决方案。

我的代码使用for循环:

neighbour_m = function(x) {
  newx = c(x[length(x)], x, x[1])
  for (i in 2:(length(newx) - 1)){
    m = mean(c(newx[i-1], newx[i+1]))
  }
}
Run Code Online (Sandbox Code Playgroud)

r

13
推荐指数
6
解决办法
1111
查看次数

在 R 中查找时间序列峰值的开始和结束

我正在处理NDVI Time-Series一年内有 23 个观察值的数据。我能够检测到 14 - 19 次观察之间出现的峰值。现在我想找到山顶的起点和终点。我可以通过使用“diff()”查找符号变化来找到峰值的开始和结束。但在某些情况下,我注意到能够找到终点,因为高峰期的终点是在明年。解决方案是在 23 次观察后重复这些值,使其循环并找到终点。

下面给出的例子将详细说明问题

x = c(250.7943,292.2904,340.459,368.811,363.4534,330.2302,291.6527,275.2815,299.9305,367.0331,461.2618,559.0772,639.6197,691.723,713.9833,709.5409,680.4415,626.1153,547.0395,450.4623,353.0839,277.257,241.597)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在此输入图像描述

我正在寻找从峰值到两个方向的符号变化,并且能够在 8 个观察点找到峰值的起点,但是当我寻找从峰值开始的终点时,我直到 23 号才发现任何变化。在这种情况下,我应该在 23 处得到峰值。如表所示,我已在 Excel 中手动重复这些值以获得符号更改。

在 R 中如何做到这一点???

一种解决方案可能是设置一个条件来检查是否在第 23 个观察之前未发现符号变化,然后将所有 23 个值填充到向量的末尾,然后查找符号变化。

有没有一种简单的方法可以实现这一点???

r time-series

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

标签 统计

r ×2

time-series ×1