我被困住了;我一直在玩循环(我知道,在R中不是一个有利的选项)并且在我的查询中对apply函数起了作用。
我有一列数据记录了FTSE上的一天是收益还是损失。我想对显示此内容的列的前3行求和并将其除以3.我想在nrow(DaysDifference)
中一直重复这一行。
请在下面找到一个可行的例子;
> FTSE[1:10,]
FTSE.Open FTSE.High FTSE.Low FTSE.Close FTSE.Volume FTSE.Adjusted
2007-01-01 6220.8 6220.8 6220.8 6220.8 0 6220.8
2007-01-02 6220.8 6312.5 6220.8 6310.9 1074946500 6310.9
2007-01-03 6310.9 6322.0 6296.0 6319.0 1606892700 6319.0
2007-01-04 6319.0 6319.0 6261.0 6287.0 1902875600 6287.0
2007-01-05 6287.0 6287.0 6220.1 6220.1 1622439300 6220.1
2007-01-08 6220.1 6246.0 6187.0 6194.2 1326700900 6194.2
2007-01-09 6194.2 6218.5 6190.4 6196.1 2143699600 6196.1
2007-01-10 6196.1 6196.1 6142.0 6160.7 1881991200 6160.7
2007-01-11 6160.7 6233.1 6130.2 6230.1 2147062400 6230.1
2007-01-12 6230.1 6247.6 6204.3 6239.0 1899868200 6239.0
DaysDifference <- FTSE$FTSE.Open - FTSE$FTSE.Close
colnames(DaysDifference) <- c('FTSE.Direction')
DaysDifference$PosInd<-ifelse(DaysDifference$FTSE.Direction>0,1,0)
# Identifys if D3P is > and if it is assigns 1, if not assigns 0
DaysDifference$TestCol<- for (i in (nrow(DaysDifference)-3))
{sum(DaysDifference$PosInd[i:(i+2)]/3)
}
上面给出了一个NULL
结果,其中包含for DaysDifference$PosInd
...然后...
x <- apply(DaysDifference$PosInd, 1, function(i) sum(DaysDifference$PosId[i:(i+2)]/3))
试验不会在向量上正确迭代,并在i:(i+2)
的第一次迭代中得到与计算结果相同的结果。
任何帮助,一如既往,非常感谢。
卡尔文
答案 0 :(得分:1)
查看zoo
包
library(zoo)
rollmean(DaysDifference$FTSE.Direction > 0, k = 3, na.pad = TRUE)