从r中的循环数据计算移动平均值

从r中的循环数据计算移动平均值,r,moving-average,arima,R,Moving Average,Arima,我想从一系列角度(β)计算一个以弧度为单位的平均角度(θ),这些角度存储在一个名为“a”的数据帧中: time beta theta theta2 1 0 na na 2 2.426551575 na na 3 5.890842799 0.678069689 0.678069689 4 0.530641823 0.8549502

我想从一系列角度(β)计算一个以弧度为单位的平均角度(θ),这些角度存储在一个名为“a”的数据帧中:

       time beta    theta           theta2
    1   0           na              na
    2   2.426551575 na              na 
    3   5.890842799 0.678069689     0.678069689
    4   0.530641823 0.854950297     0.854950297
    5   4.794960386 -0.449975202    5.833210105
    6   1.271620156 0.104679019     0.104679019
    7   5.789548201 -0.236747291    6.046438017
    8   1.053579352 0.610520801     0.610520801
    9   0.095112206 0.218351484     0.218351484
    10  6.108843722 0.324783324     0.324783324
Beta以弧度为单位,由包裹的高希分布随机绘制而成。我想计算θ(实际上是θ2,以弧度为单位)。我用蛮力将弧度转换成正数和负数单位,圆周率/圆周率为180度,但我在寻找一种更优雅的方法

我曾希望这会起作用(调用循环和dplyr包):


a$theta我相信如果我正确理解了你,那么你是在试图计算数据的移动平均值,这在本质上是循环的。如果是这种情况,您可以选择光栅的
movingFun
函数来获得移动平均值。因为平均值本质上不是矢量化的,所以它总是返回一个值

如果您粘贴所需的输出,这将是一件好事

在这里,我选择滞后值为2,循环性质为True

library(raster)
movingFun(x, n= 2, fun = mean, circular = TRUE)
输入数据:

x <- c(0,2.426551575,
       5.890842799,
       0.530641823,
       4.794960386,
       1.271620156,
       5.789548201,
       1.053579352,
       0.095112206,
       6.108843722,
       1.240271853,
       5.350922943)

我相信如果我理解正确的话,那么你是在试图计算数据的移动平均值,这在本质上是循环的。如果是这种情况,您可以选择光栅的
movingFun
函数来获得移动平均值。因为平均值本质上不是矢量化的,所以它总是返回一个值

如果您粘贴所需的输出,这将是一件好事

在这里,我选择滞后值为2,循环性质为True

library(raster)
movingFun(x, n= 2, fun = mean, circular = TRUE)
输入数据:

x <- c(0,2.426551575,
       5.890842799,
       0.530641823,
       4.794960386,
       1.271620156,
       5.789548201,
       1.053579352,
       0.095112206,
       6.108843722,
       1.240271853,
       5.350922943)

谢谢,这很有帮助。是的,数据是圆形的(以弧度为单位)。movingFun()似乎使用实际数据来推导圆的边界…有没有办法将其强制为0和2pi?@TCS,你是说缩放你的平均值,如果是这样,你可以这样做:
NISTunits::NISTradianTOdeg(scales::rescale(vect,to=c(0,2*pi))
,这里的“vect”是你的
movingFun
,您必须传递称为“从比例库重新缩放”的函数,如果您想转换为度,则可以使用NISTunits库。谢谢--这很有帮助。是的,数据是圆形的(以弧度为单位)。movingFun()似乎使用实际数据来推导圆的边界…有没有办法将其强制为0和2pi?@TCS,你是说缩放你的平均值,如果是这样,你可以这样做:
NISTunits::NISTradianTOdeg(scales::rescale(vect,to=c(0,2*pi))
,这里的“vect”是你的
movingFun
,您必须传递称为“从比例库重新缩放”的函数,若要转换为度,则可以使用该库。
> movingFun(x, n= 2, fun = mean, circular = T)
 [1] 2.6754615 1.2132758 4.1586972 3.2107423
 [5] 2.6628011 3.0332903 3.5305842 3.4215638
 [9] 0.5743458 3.1019780 3.6745578 3.2955974