Dataframe 如何将另一列的简单移动平均值列添加到Julia数据帧中

Dataframe 如何将另一列的简单移动平均值列添加到Julia数据帧中,dataframe,julia,Dataframe,Julia,我有一个Julia数据框,其中一列称为“close”,我想在数据框中添加另一列称为“sma”,它是“close”的简单移动平均值。感谢所有能帮忙的人 我注意到代码amrod中有一个问题。它不考虑SMA的第一个长度,该长度没有足够的先前数据点来提供良好的SMA,并且还提供了所要求的SMA的两倍。我把它改为输入零,直到那时,我还在弄清楚它是如何工作的时候,也改变了变量名 function makeSMA(data, SMA) len = length(data) y = Vector

我有一个Julia数据框,其中一列称为“close”,我想在数据框中添加另一列称为“sma”,它是“close”的简单移动平均值。感谢所有能帮忙的人

我注意到代码amrod中有一个问题。它不考虑SMA的第一个长度,该长度没有足够的先前数据点来提供良好的SMA,并且还提供了所要求的SMA的两倍。我把它改为输入零,直到那时,我还在弄清楚它是如何工作的时候,也改变了变量名

function makeSMA(data, SMA)
    len = length(data)
    y = Vector{Float64}(len)
    for i in 1:SMA-1
        y[i] = NaN
    end
    for i in SMA:len
        y[i] = mean(data[i-(SMA-1):i])
    end
    return y
end
选中此项:

function ma{T <: Real}(x::Vector{T}, wind::Int)
    len = length(x)
    y = Vector{Float64}(len)
    for i in 1:len
        lo = max(1, i - wind)
        hi = min(len, i + wind)
        y[i] = mean(x[lo:hi])
    end
    return y
end

x = collect(1:100)
y = ma(x, 4)

谢谢,成功了!:)我刚刚删除了“vector”规范。@Puzzer是的,可能更通用的方法是提供一个nx1或1xn
阵列。在第二个版本中,平均值是由
+1个元素组成的。使
与元素数量相对应可能更直观。只需将其修正为使风与MAyou中所取元素数量相对应,就可以通过修改
hi
lo
来改变函数处理这些极端点的方式。通过“将SMA要求加倍”,我的意思是,如果你要求SMA为8,那么SMA为16。lo在前8个步骤中保持在1,而hi在8-16之间。你所称的双倍的
SMA
实际上是计算平均值的(半)窗口(因此
wind
),SMA是随后得到的函数或序列。因此,一个4的窗口,取值范围从
i-4
i+4
。我认为这种方法更好,因为你不必担心非整数指数。哦,我明白你的意思,我用它来做一个向后看的SMA,我想这就是我们看到它的不同之处。好吧。顺便说一下,我认为处理这些“低阶MA”的更好方法是将它们指定为
NaN
function ma{T <: Real}(x::Vector{T}, wind::Int)
    len = length(x)
    y = Vector{Float64}(len)
    for i in 1:len
        if i < wind
            y[i] = NaN
        else
            y[i] = mean(x[i - wind + 1:i])
        end
    end
    return y
end