r - 创建具有多个 ifelse() 的列

标签 r loops xts

require(xts)

data<- c(100,101,102,103,104,99,98,97,94,93,103,90,104,105,110)
date<- Sys.Date()-15:1
file<- xts(data,date)
colnames(file)<- "CLOSE"
file$high<- cummax(file$CLOSE)
file$trade<- ifelse(file$high*.95>=file$CLOSE, 1,ifelse(file$high*.9>=file$CLOSE, 2,0))
file

           CLOSE high trade
2013-07-05   100  100     0
2013-07-06   101  101     0
2013-07-07   102  102     0
2013-07-08   103  103     0
2013-07-09   104  104     0
2013-07-10    99  104     0
2013-07-11    98  104     1
2013-07-12    97  104     1
2013-07-13    94  104     1
2013-07-14    93  104     1
2013-07-15   103  104     0
2013-07-16    90  104     1
2013-07-17   104  104     0
2013-07-18   105  105     0
2013-07-19   110  110     0

我给出的交易栏命令是当.90*column high >= close时,交易结果应该是2。我不明白为什么 2013-07-14 和 2013-07-16 的贸易栏不等于 2。

我已经找到了上述问题的答案。我的实际问题是别的。我以为我会做研究并完成它,但问题仍然存在。 我需要交易栏在每次收盘价从高点下跌 5%、10%、15%...时给我 +1 或 -1,并且当收盘价再次上涨 10% 时,它应该给我 - 1. 当我们在任何给定日期添加 +1 和 -1 时,它不应该是 -ve 或大于 5。

最佳答案

为了清晰起见,我认为我更喜欢 Joshua 的方法,但修复 ifelse 子句的方法是交换测试。所以改变这个:

file$trade<- ifelse(file$high*.95>=file$CLOSE, 1,ifelse(file$high*.9>=file$CLOSE, 2,0))

对此:

file$trade<- ifelse(file$high*.90>=file$CLOSE, 2,ifelse(file$high*.95>=file$CLOSE, 1,0))

附注使用 ifelse 可能会更快(当分解为三行时,所有“2”首先设置为 0,然后设置为 1,然后再设置为 2)。在您的情况下,“2”结果相对较少,我确信差异太小而无法进行基准测试。

关于r - 创建具有多个 ifelse() 的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17761349/

相关文章:

java - Android:循环从ArrayList中选择随机图像

c - 我不确定如何跟踪代码数组?

r - 扩展 xts 对象的索引

r - 在 XTS 对象上使用 cbind 将先前列名称中的破折号 (-) 字符更改为点 (.)

r - 聚类中的大距离矩阵

java - 打印输入正整数的公约数

r - 如何将多个变量的重复测量扩展到宽格式?

r - 向 data.table 添加新方法

r - R Shiny 应用程序中的 "Next"按钮

R通过快捷方式读取RDS文件