首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >R条件函数/循环检查数据帧中的值

R条件函数/循环检查数据帧中的值
EN

Stack Overflow用户
提问于 2014-03-01 05:29:25
回答 2查看 1.9K关注 0票数 0

我正在尝试编写代码,以检查df中的1值是否大于同一df中不同行/列中的另一个值。

我有以下样本:

代码语言:javascript
代码运行次数:0
运行
复制
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。我会想象这些代码看起来像

代码语言:javascript
代码运行次数:0
运行
复制
if (df$GSPC.Open >= df$GSPC.Close[1]) {
    df$GSPC.AboveOpen = 1
}

但我保留一个长度>1的错误。

如果当前的打开值大于或等于前一天的关闭值,则我希望该函数创建一个填充w/离散值的列df$GSPC.AboveOpen。

我怎么写这段代码?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-01 13:33:19

我不建议在这里使用循环。您使用的是时间序列-因此,使用适当的时间序列方法(如lag)。

此代码将当前的打开与前一天的关闭进行比较,如果打开的值更高(或等于),则给出1,否则给出0

代码语言:javascript
代码运行次数:0
运行
复制
library(quantmod)

getSymbols('^GSPC',src='yahoo',from='1990-01-01')

GSPC$AboveOpen<-(GSPC[,"GSPC.Open"]>=lag(GSPC[,"GSPC.Close"],1))

万一你还想处理单一股票数据:请记住,.Close.Open (至少来自雅虎)不会被分割和调整股息。.Adjusted是调整后的收盘点。

票数 1
EN

Stack Overflow用户

发布于 2014-03-01 05:47:14

试试这个:

代码语言:javascript
代码运行次数:0
运行
复制
df$GreaterThanPreviousClose <- NA

for (i in 2:nrow(df)){
df[i,6] <- df[i,2] >= df[i-1,5]
}

也许这会加快速度

代码语言:javascript
代码运行次数:0
运行
复制
compare <- function(i){
 Larger <- df[i,2] >= df[i-1,5]
 return(Larger)
}

df$GreaterThanPreviousClose <- sapply(1:nrow(df),compare)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22110558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档