我有大量数据集,需要为其生成移动平均值。
我用df$new_value1=replace(df$value, df$value<2.0,0)
拉出我需要的东西(即值> = 2.0)。
然后我使用df$new_value2=round((df$new_value1)*50,1)
一旦有了日期,就可以使用以下方法计算SMA:
df=df%>%
group_by(Name) %>%
mutate(SMA1 = round(TTR::SMA(new_value2,50),1)) %>%
mutate(SMA2 = round(TTR::SMA(new_value2,100),1)) %>%
mutate(SMA3 = round(TTR::SMA(new_value2,150),1)) %>%
mutate(SMA4 = round(TTR::SMA(new_value2,200),1)) %>%
mutate(SMA5 = round(TTR::SMA(new_value2,250),1))`
虽然这在大多数情况下都有效,并且会根据需要创建SMA,但我将获得如下输出:
Name new_value2 SMA5(Current) SMA5(What it should be)
A 2.2
A 2.3
A 2.5
A 3.0
A 2.7 2.54 2.54
A 2.1 2.52 2.53
A 0 2.52 2.06
A 0 2.52 1.56
A 0 2.52 0.96
A 0 2.52 0.42
A 0 0.00 0.00
我的问题是,它保留了最后一个数字(看起来好像无法识别零),而不是对零进行平均。我希望数据看起来像最右边的列,但现在看起来像第3列。我不确定是什么问题。