好的,让我们在下面的代码中计算2天内的滚动简单移动平均值:
# Use TTR package to create rolling SMA n day moving average
new.df$close.sma.n2 <- SMA(new.df[,"Close"], 2)
假设我想计算2:30的n天期间
这里的输入是:
close.sma.n ** 以及SMA计算的数值。
所以我的问题是: 如何在不同的SMA周期上编写一行代码来执行上述计算,还可以在数据框中创建一个具有相应close.sma.n2,3,4,5,6等值的新列?
我明白我能做到:
n.sma <- 2:30
并将该变量放入:
new.df$close.sma.n2 <- SMA(new.df[,"Close"], n.sma)
也许我可以:
name <- "n2:30"
并将其置于:
new.df$close.sma.name <- SMA(new.df[,"Close"], n.sma)
答案 0 :(得分:2)
你没有提供样本数据或SMA,所以我编写了虚函数来测试我的代码。
df <- data.frame(Close=c(1, 2, 3, 4))
SMA <- function(x, numdays) {numdays}
然后,我编写了一个函数,它接受平均天数,并返回一个函数,该函数接受data.frame并在那么多天内获取SMA。
getSMA <- function(numdays) {
function(new.df) {
SMA(new.df[,"Close"], numdays)
}
}
然后,创建一个矩阵以将SMA放入
smas <- matrix(nrow=nrow(df), ncol=0)
并填写。
for (i in 2:30) {
smas <- cbind(smas, getSMA(i)(df))
}
然后,将列名设置为您希望它们的名称
colnames(smas) <- sapply(2:30, function(n)paste("close.sma.n", n, sep=""))
并将其与起始数据框绑定。
df <- cbind(df, smas)
现在您拥有原始data.frame,加上"close.sma.n2" through ".n30"