使用多个ifelse()创建列 require(xts) 数据
交易列从不为2,因为无论何时使用多个ifelse()创建列 require(xts) 数据,r,loops,xts,R,Loops,Xts,交易列从不为2,因为无论何时file$high*.9>=file$CLOSE为TRUE,file$high*.95>=file$CLOSE也为TRUE,您的第一次ifelse调用从不为FALSE 改为这样做: 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
file$high*.9>=file$CLOSE
为TRUE
,file$high*.95>=file$CLOSE
也为TRUE
,您的第一次ifelse
调用从不为FALSE
改为这样做:
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
file$trade=file$CLOSE]=file$CLOSE]为了清晰起见,我更喜欢Joshua的方法,但是修复ifelse
子句的方法是围绕测试交换。因此,改变这一点:
file$trade <- 0
file$trade[file$high*.95>=file$CLOSE] <- 1
file$trade[file$high*.90>=file$CLOSE] <- 2
file$trade=file$CLOSE,1,ifelse(file$high*.9>=file$CLOSE,2,0))
为此:
file$trade<- ifelse(file$high*.95>=file$CLOSE, 1,ifelse(file$high*.9>=file$CLOSE, 2,0))
file$trade=file$CLOSE,2,ifelse(file$high*.95>=file$CLOSE,1,0))
另外,使用ifelse可能更快(当分解为三行时,所有“2”在设置为2之前先设置为0,然后设置为1)。在你的例子中,“2”的结果相对较少,我确信差异太小,无法进行基准测试。我可以对交易栏做些什么吗,在我得到第一个1之后,所有元素都将为零,直到我得到2,@AshishJalan,这应该是另一个问题,有它自己的样本数据:-)结果是正确的,如果x*。95
file$trade<- ifelse(file$high*.90>=file$CLOSE, 2,ifelse(file$high*.95>=file$CLOSE, 1,0))