2016-11-17 63 views
1

工作,我已經注意到,==似乎並不與POSIXct工作:如何獲得POSIXct與==

a <- structure(c(1466985600, 1464652800, 1464652800, 1464652800, 1472428800, 
1466985600, 1468195200, 1472428800, 1472428800, 1474848000, 1464652800, 
1468195200, 1476057600, 1464652800, 1472428800, 1472428800, 1460332800, 
1460332800, 1460332800, 1460332800), class = c("POSIXct", "POSIXt" 
), tzone = "UTC") 

a 

[1] 「2016年6月27日UTC」「2016- 「2016-05-31 UTC」「2016-05-31 UTC」「2016-08-29 UTC」「2016-06-27 UTC」「2016-07-11 UTC」 「2016-08-08 -29 UTC「 [9]」2016-08-29 UTC「」2016-09-26 UTC「」「2016-05-31 UTC」「2016-07-11 UTC」「2016-10-10 UTC」「2016 「2016-04-11 UTC」「2016-08-29 UTC」 「2016-08-29 UTC」 [17]「2016-04-11 UTC」「2016-04-11 UTC」「2016-04-11 UTC 「」2016-04-11 UTC「

table(a=="2016-06-27") 
FALSE 
    20 
table(a=="2016-06-27 UTC") 
FALSE 
    20 
table(a==as.POSIXct("2016-06-27 UTC")) 
FALSE 
    20 
table(a==as.POSIXct("2016-06-27")) 
FALSE 
    20 
a[a=="2016-06-27"] 
character(0) 

我怎樣才能得到這個工作?

這會的工作,但我真的希望這不是我唯一的選擇:

a[a==1466985600] 
[1] "2016-06-27 UTC" "2016-06-27 UTC" 

回答

3

時區必須分開,除非format參數中指定。您的代碼將時區嵌入到字符串中,但默認格式爲"%Y-%m-%d""%Y/%m/%d",因此時區會被截斷並且默認爲當前語言環境。我們可以找到a的時區與attr(),因爲它的屬性是a

table(a == as.POSIXct("2016-06-27", tz = attr(a, "tzone"))) 

# FALSE TRUE 
# 18  2 
+0

類似但可能更簡單:'a == utctime(「2016-06-27」,tz =「UTC」)'。需要[隨時](https://cran.r-project.org/package=anytime)。 POSIXct和平等的另一個問題當然是POSIXct真的是一個浮點數,它有自己的問題 - 參見R FAQ 7.31。 –