R的另一个POSIXlt困境



每隔一段时间,我就会发现一个真正的挠头......知道这里发生了什么吗?

> a = strptime("2003-11-01", "%Y-%m-%d")
> b = strptime("2004-01-31", "%Y-%m-%d")
> unlist(a)
  sec   min  hour  mday   mon  year  wday  yday isdst 
    0     0     0     1    10   103     6   304     0 
> unlist(b)
  sec   min  hour  mday   mon  year  wday  yday isdst 
    0     0     0    31     0   104     6    30     0 
> a$mon = a$mon-1
> b$mon = b$mon-1
> a=as.POSIXlt(as.POSIXct(a))
> b=as.POSIXlt(as.POSIXct(b))
> a
[1] NA
> b
[1] "2003-12-31 PST"
> unlist(a)
  sec   min  hour  mday   mon  year  wday  yday isdst 
   NA    NA    NA    NA    NA    NA    NA    NA    -1 
> unlist(b)
  sec   min  hour  mday   mon  year  wday  yday isdst 
    0     0     0    31    11   103     3   364     0 

为什么我可以编辑 b 但不能编辑 a? 我觉得我一定错过了什么。

当您

减去一个月时,您的a日期在技术上以夏令时为单位。除非您还更改了 isdst 属性,否则它不是有效的日期。

> a <- strptime("2003-11-01", "%Y-%m-%d")
> a2 <- a
> a$mon <- a$mon - 1
> as.POSIXct(a)
[1] NA
> a2$mon <- a2$mon - 1
> a2$isdst <- 1
> as.POSIXct(a2)
[1] "2003-10-01 EDT"

这 ( a ) 适用于我,R 和会话详细信息如下:

> a$mon = a$mon-1
> a=as.POSIXlt(as.POSIXct(a))
> a
[1] "2003-10-01 01:00:00 BST"
> unlist(a)
  sec   min  hour  mday   mon  year  wday  yday isdst 
    0     0     1     1     9   103     3   273     1

根据您的区域设置和时区设置等没有任何进一步的信息,我将不得不猜测在您的区域设置/时区中,从$mon元素中减去 1 a 指示的日期/时间不存在。R在这些事情上非常聪明,但时区和区域设置经常吸引人们。

真正的问题是,当您只处理日期时,为什么要使用日期/时间对象? 在此示例中,a <- as.Date("2003-11-01", "%Y-%m-%d")就足够了。

我的R会话的详细信息:

> sessionInfo()
R version 2.15.0 Patched (2012-04-14 r59019)
Platform: x86_64-unknown-linux-gnu (64-bit)
locale:
 [1] LC_CTYPE=en_GB.utf8       LC_NUMERIC=C             
 [3] LC_TIME=en_GB.utf8        LC_COLLATE=en_GB.utf8    
 [5] LC_MONETARY=en_GB.utf8    LC_MESSAGES=en_GB.utf8   
 [7] LC_PAPER=C                LC_NAME=C                
 [9] LC_ADDRESS=C              LC_TELEPHONE=C           
[11] LC_MEASUREMENT=en_GB.utf8 LC_IDENTIFICATION=C      
attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods  
[7] base     
other attached packages:
[1] ggplot2_0.9.1
loaded via a namespace (and not attached):
 [1] colorspace_1.1-1   dichromat_1.2-4    digest_0.5.2      
 [4] grid_2.15.0        labeling_0.1       MASS_7.3-18       
 [7] memoise_0.1        munsell_0.3        plyr_1.7.1        
[10] proto_0.3-9.2      RColorBrewer_1.0-5 reshape2_1.2.1    
[13] scales_0.2.1       stringr_0.6        tools_2.15.0

相关内容

  • 没有找到相关文章

最新更新