我正在尝试编写代码,以检查df中的1值是否大于同一df中不同行/列中的另一个值。
我有以下样本:
Date GSPC.Open GSPC.High GSPC.Low GSPC.Close
2014-02-28 2014-02-28 1855.12 1867.92 1847.67 1859.45
2014-02-27 2014-02-27 1844.90 1854.53 1841.13 1854.29
2014-02-26 2014-02-26 1845.79 1852.65 1840.66 1845.16
2014-02-25 2014-02-25 1847.66 1852.91 1840.19 1845.12
我希望创建一个循环或函数来检查GSPC.Open是否大于或等于前一天的GSPC.Close。我会想象这些代码看起来像
if (df$GSPC.Open >= df$GSPC.Close[1]) {
df$GSPC.AboveOpen = 1
}
但我保留一个长度>1的错误。
如果当前的打开值大于或等于前一天的关闭值,则我希望该函数创建一个填充w/离散值的列df$GSPC.AboveOpen。
我怎么写这段代码?
谢谢!
发布于 2014-03-01 05:33:19
我不建议在这里使用循环。您使用的是时间序列-因此,使用适当的时间序列方法(如lag
)。
此代码将当前的打开与前一天的关闭进行比较,如果打开的值更高(或等于),则给出1
,否则给出0
。
library(quantmod)
getSymbols('^GSPC',src='yahoo',from='1990-01-01')
GSPC$AboveOpen<-(GSPC[,"GSPC.Open"]>=lag(GSPC[,"GSPC.Close"],1))
万一你还想处理单一股票数据:请记住,.Close
和.Open
(至少来自雅虎)不会被分割和调整股息。.Adjusted
是调整后的收盘点。
发布于 2014-02-28 21:47:14
试试这个:
df$GreaterThanPreviousClose <- NA
for (i in 2:nrow(df)){
df[i,6] <- df[i,2] >= df[i-1,5]
}
也许这会加快速度
compare <- function(i){
Larger <- df[i,2] >= df[i-1,5]
return(Larger)
}
df$GreaterThanPreviousClose <- sapply(1:nrow(df),compare)
https://stackoverflow.com/questions/22110558
复制相似问题