2013-03-26 78 views
4

重複性代碼:威迫POSIXct對象Date對象

# Loading quantmod 

library(quantmod) 

# Please, put in R this structure 

a <- structure(c(2.4, 2.35, 2.44, 2.44, 2.31, 2.32, 2.41, 2.43, 2.46, 
      2.42, 2.45, 2.39, 2.3, 2.41, 2.33, 2.37, 2.38, 2.4, 2.275, 2.235, 
      -0.0300000000000002, -0.0499999999999998, 0.0899999999999999, 
      0, -0.13, 0.00999999999999979, 0.0900000000000003, 0.02, 0.0299999999999998, 
      -0.04, 0.0300000000000002, -0.0600000000000001, -0.0900000000000003, 
      0.11, -0.0800000000000001, 0.04, 0.00999999999999979, 0.02, -0.125, 
      -0.04, 2.75684036527164, 2.80336038090653, 2.85070650150373, 
      2.80638610182307, 2.78192004966867, 2.75238601492226, 2.72915916431245, 
      2.7324175575505, 2.77446196662146, 2.78562833574758, 2.90799335924598, 
      2.96217549002515, 2.93863268151342, 2.86048512414597, 2.89259151463448, 
      2.94864066602014, 2.88926002904347, 2.86619290219901, 2.83438912314523, 
      2.7868613815265, -0.0410505398303571, 0.0465200156348926, 0.0473461205971986, 
      -0.0443203996806614, -0.0244660521544064, -0.0295340347464039, 
      -0.0232268506098166, 0.00325839323805921, 0.0420444090709573, 
      0.0111663691261232, 0.1223650234984, 0.0541821307791639, -0.02354280851173, 
      -0.078147557367453, 0.63904885124, 0.0560491513856629, -0.0593806369766661, 
      -0.0230671268444684, -0.031803779053778, -0.0475277416187283, 
      0.172217775014356, 0.147897402545627, 0.107842980922542, 0.111384630261207, 
      0.116199395018325, 0.119482271409344, 0.130753386099011, 0.119444345583785, 
      0.101923549299963, 0.1002890717992, 0.032754605975247, 0.00669932935895989, 
      0.0105319562242379, 0.0453224418800389, 0.0294942187512146, -0.0142520227072014, 
      0.0285107030408045, 0.0335789802090738, 0.0520861644718136, 0.0759107647712609, 
      0.0100035842055157, -0.0243203724687295, -0.0400544216230849, 
      0.0035416493386653, 0.00481476475711817, 0.00328287639101843, 
      0.0112711146896673, -0.0113090405152261, -0.0175207962838217, 
      -0.00163447750076351, -0.0675344658239525, -0.0260552766162871, 
      0.00383262686527797, 0.034790485655801, -0.0158282231288243, 
      -0.043746241458416, 0.0427627257480059, 0.0050682771682693, 0.0185071842627398, 
      0.0238246002994473, -0.0191994306395253, -0.0205181532675806, 
      -0.0249013268238319, -0.0237728532488024, 0.023560859824188, 
      0.0493604748650355, -0.0226612828685699, -0.0242381517516994, 
      -0.0229683470958784, 0.0193184371423425, -0.0146720746595668, 
      -0.0103171513510591, -0.0153945062856312, -0.0207074718973363, 
      0.113843134319118, -0.017036109656239, 0.00401445822575002, -0.0152979313119177, 
      -0.00168455008690644, 0.0234396377388245), .indexTZ = "", .indexCLASS = c("POSIXct", 
                         "POSIXt"), tclass = c("POSIXct", "POSIXt"), tzone = "", na.action = structure(1L, class = "omit", index = 1090364400), class = c("xts", 
                                                         "zoo"), index = structure(c(1090450800, 1090537200, 1090796400, 
                                                                1090882800, 1090969200, 1091055600, 1091142000, 1091401200, 1091487600, 
                                                                1091574000, 1091660400, 1091746800, 1092006000, 1092092400, 1092178800, 
                                                                1092265200, 1092351600, 1092610800, 1092697200, 1092783600), tzone = "", tclass = c("POSIXct", 
                                                                                     "POSIXt")), .Dim = c(20L, 7L), .Dimnames = list(NULL, c("Inflation", 
                                                                                                   "dInflation", "Fear", "dFear", "Greed", "dGreed", "Growth"))) 
# These are 'a' dates 

index(a) 

# You can see it is a POISXct object whose last element is equal to 
# "2004-08-18 01:00:00 CEST" 

is(index(a)) 

# Coercing to Date object 

as.Date(index(a)) 

# Last element goes back by 1 day to "2004-08-17" 

從代碼可以看到,當我試圖脅迫該POSIXct對象的一個​​日期,每個日期是1天帶回。

我想在運行此代碼時保留原始日期:我應該在代碼中修改哪些內容?

這是我的會話信息:

R version 2.15.2 (2012-10-26) 
Platform: i386-w64-mingw32/i386 (32-bit) 

locale: 
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C       
[5] LC_TIME=English_United States.1252  

attached base packages: 
[1] parallel stats  graphics grDevices datasets utils  methods base  

other attached packages: 
[1] quantmod_0.4-0    TTR_0.21-1     Defaults_1.1-1    
[4] PerformanceAnalytics_1.1.0 Matrix_1.0-11    lattice_0.20-13   
[7] MASS_7.3-23    Rsolnp_1.14    truncnorm_1.0-6   
[10] numDeriv_2012.9-1   xts_0.9-3     zoo_1.7-9     
[13] RcppArmadillo_0.3.6.3  Rcpp_0.10.2    rcom_2.2-5     
[16] rscproxy_2.0-5    

loaded via a namespace (and not attached): 
[1] grid_2.15.2  rmgarch_1.00-4  rugarch_1.01-5  timeDate_2160.97 
[5] timeSeries_2160.95 tools_2.15.2  
+0

+1可重現的例子。 – 2013-03-26 14:56:16

回答

3

我想你只需要你的時區添加到轉換。你有沒有試過...

as.Date(index(a) , tz = "CET") 
[1] "2004-07-22" "2004-07-23" "2004-07-26" "2004-07-27" "2004-07-28" 
[6] "2004-07-29" "2004-07-30" "2004-08-02" "2004-08-03" "2004-08-04" 
[11] "2004-08-05" "2004-08-06" "2004-08-09" "2004-08-10" "2004-08-11" 
[16] "2004-08-12" "2004-08-13" "2004-08-16" "2004-08-17" "2004-08-18" 

index(a) 
[1] "2004-07-22 BST" "2004-07-23 BST" "2004-07-26 BST" "2004-07-27 BST" 
[5] "2004-07-28 BST" "2004-07-29 BST" "2004-07-30 BST" "2004-08-02 BST" 
[9] "2004-08-03 BST" "2004-08-04 BST" "2004-08-05 BST" "2004-08-06 BST" 
[13] "2004-08-09 BST" "2004-08-10 BST" "2004-08-11 BST" "2004-08-12 BST" 
[17] "2004-08-13 BST" "2004-08-16 BST" "2004-08-17 BST" "2004-08-18 BST" 
+0

它工作正常:) – 2013-03-26 15:20:58

3

這是一個時區問題。您需要設置索引的時區和/或環境變量的系統TZ

Sys.setenv(TZ="Europe/Berlin") 
indexTZ(a) <- "Europe/Berlin" 
as.Date(index(a)) 

這是很好的做法與日期/時間對象打交道時,設置系統TZ環境變量。

+0

是否與SimonO101解決方案的相同? – 2013-03-26 15:11:05

+0

@LisaAnn:不,他指定轉換期間的時區。我鼓勵你在全球設置它,所以你不必爲每次轉換都指定它。 – 2013-03-26 15:12:06

+0

好的,明白了。謝謝 – 2013-03-26 15:12:32