2017-02-14 27 views
1
到矩陣

所以我有一個XTS看起來像這樣的時候:如何保持指數/日期從XTS變化中的R

  EUR.CLOSE EUR.CLOSE.1  EMA RUB.CLOSE RUB.CLOSE.1 EMA.1 COP.CLOSE COP.CLOSE.1 EMA.2 MXN.CLOSE 
2016-08-30 -0.7176776 0.1507033 42.50321 0.6565255 0.1969145 52.73467 0.4499486 -1.517971 47.0703 1.618209 
      MXN.CLOSE.1 EMA.3 INR.CLOSE INR.CLOSE.1 EMA.4 KRW.CLOSE KRW.CLOSE.1 EMA.5 PHP.CLOSE PHP.CLOSE.1 
2016-08-30 0.6377586 59.46614 0.06742503 0.04767418 51.04673 0.7059685 -0.02246669 52.88059 -0.06188119 -0.7181662 
       EMA.6 
2016-08-30 45.22928 
> nt[,1] 

dput這裏:

structure(c(-0.717677627452784, 0.150703341994461, 42.5032053202923, 
0.656525491646624, 0.196914493557725, 52.7346708652452, 0.44994857730542, 
-1.51797051765522, 47.0703023915683, 1.61820941470502, 0.637758577228606, 
59.4661365407602, 0.0674250335669636, 0.0476741757424079, 51.0467264878632, 
0.705968496624654, -0.0224666928598931, 52.8805945280585, -0.0618811881188627, 
-0.718166164442612, 45.2292753580903), .Dim = c(1L, 21L), .Dimnames = list(
    NULL, c("EUR.CLOSE", "EUR.CLOSE.1", "EMA", "RUB.CLOSE", "RUB.CLOSE.1", 
    "EMA.1", "COP.CLOSE", "COP.CLOSE.1", "EMA.2", "MXN.CLOSE", 
    "MXN.CLOSE.1", "EMA.3", "INR.CLOSE", "INR.CLOSE.1", "EMA.4", 
    "KRW.CLOSE", "KRW.CLOSE.1", "EMA.5", "PHP.CLOSE", "PHP.CLOSE.1", 
    "EMA.6")), index = structure(1472533200, tzone = "", tclass = c("POSIXct", 
"POSIXt")), .indexTZ = "", class = c("xts", "zoo"), .indexCLASS = c("POSIXct", 
"POSIXt"), tclass = c("POSIXct", "POSIXt"), tzone = "") 

而且我想把它轉換成於:

Dates    % dev from 20MA % dev from 20MA  RSI 
    2016-08-30 EUR -0.71767763  0.15070334 42.50321 
    2016-08-30 RUB  0.65652549  0.19691449 52.73467 
    2016-08-30 COP  0.44994858  -1.51797052 47.07030 
    2016-08-30 MXN  1.61820941  0.63775858 59.46614 
    2016-08-30 INR  0.06742503  0.04767418 51.04673 
    2016-08-30 KRW  0.70596850  -0.02246669 52.88059 
    2016-08-30 PHP  -0.06188119  -0.71816616 45.22928 

我試過下面的代碼:

out.trend <- matrix(new.trend(MergedData), ncol = 3, byrow = TRUE, 
        dimnames = list(paste0(cursig), c("% dev from 20MA", "% dev from 20MA", "RSI"))) 

但是,這導致上述矩陣沒有日期。無論如何,我可以從我的xts矢量追加日期嗎?

+0

是怎樣一個R/XTS質疑bash的問題完全相同的副本? –

回答

1

如果你想保留日期和字符變量,你需要一個data.frame,而不是一個只能容納一個類型的矩陣。轉換後要做大量的清理工作,但沒有什麼不尋常的。這裏使用tidyverse,但轉換爲另一種語法,如果你喜歡。 x是上面的xts對象。

library(tidyverse) 

x %>% as.data.frame() %>% 
    rownames_to_column('date') %>% 
    gather(var, val, -date) %>% 
    separate(var, c('currency', 'var'), extra = 'merge') %>% 
    mutate(date = as.Date(date), 
      var = sub('^\\d$', 'RSI', var), 
      var = coalesce(var, 'RSI'), 
      currency = na_if(currency, 'EMA')) %>% 
    fill(currency) %>% 
    spread(var, val) 

#>   date currency  CLOSE  CLOSE.1  RSI 
#> 1 2016-08-30  COP 0.44994858 -1.51797052 47.07030 
#> 2 2016-08-30  EUR -0.71767763 0.15070334 42.50321 
#> 3 2016-08-30  INR 0.06742503 0.04767418 51.04673 
#> 4 2016-08-30  KRW 0.70596850 -0.02246669 52.88059 
#> 5 2016-08-30  MXN 1.61820941 0.63775858 59.46614 
#> 6 2016-08-30  PHP -0.06188119 -0.71816616 45.22928 
#> 7 2016-08-30  RUB 0.65652549 0.19691449 52.73467