2012-10-09 64 views
2

我在R中有一個xts對象,我想從中創建另一個對象。我XTS物體看起來像:R中的xts對象的條件語句

dates = seq(from=as.Date('2012-09-01'),to=as.Date('2012-09-05'),'day') 
my_xts_obj = xts(c(1,2,3,4,5),dates) 
> my_xts_obj 
      [,1] 
2012-09-01 1 
2012-09-02 2 
2012-09-03 3 
2012-09-04 4 
2012-09-05 5 

我希望創建一個符合以下條件的

val = 0, if my_xts_obj >2.5 and <3.5 
val = -1, if my_xts_obj <2.5 
val = +1, if my_xts_obj <3.5 

產生另一個對象,

我可以用
my_new_xts_obj 

      [,1] 
2012-09-01 -1 
2012-09-02 -1 
2012-09-03 0 
2012-09-04 1 
2012-09-05 1 

一種方法是分析它通過for循環,使用if then語句來創建我的對象。有沒有更好的辦法?

我能想到的另一種方法是

my_new_xts_obj = my_xts_obj%/%2.5 + my_xts_obj%/%3.5, gives me 
2012-09-01 0 
2012-09-02 0 
2012-09-03 1 
2012-09-04 2 
2012-09-05 3 

這不正是我要找

回答

3

你可以用子集輕鬆地做到這一點:

x <- my_xts_obj 
y <- x*0 
y[x < 2.5] <- -1 
y[x > 3.5] <- 1