整数到POSIXlt

vit*_*232 1 r posixlt

我开始处理基地R如何处理日期/时间,但仍有一些不确定性.

使用以下数据集(从气象数据中发挥作用),我能够使用该as.character()函数转换为POSIXct和POSIXlt .Date.Time以yymmddhhmm格式提供.

Date.Time <- c(1107151300, 1107151400, 1107151500, 1107151600, 1107151700, 1107151800)
WindSpd <-   c(11.8, 14.5, 14.9, 14.1, 15.2, 17.1)

##Using as.character()##
#Note POSIXlt this time
w <- data.frame(Date.Time, WindSpd)
w$Date.Time <- as.POSIXlt(as.character(w$Date.Time), format = '%y%m%d%H%M', 
origin = '2011-07-15 13:00:00')
w

#Now POSIXct
x <- data.frame(Date.Time, WindSpd)
x$Date.Time <- as.POSIXct(as.character(x$Date.Time), format = '%y%m%d%H%M', 
origin = '2011-07-15 13:00:00')
x
Run Code Online (Sandbox Code Playgroud)

但是,为了转换为日期,将整数转换为字符似乎很愚蠢.当我尝试直接转换整数时,我得到所有NA值.

##Trying to coerce the intergers##
#note POSIXlt this time
y <- data.frame(Date.Time, WindSpd)
y$Date.Time <- as.POSIXlt(y$Date.Time, format = '%y%m%d%H%M', 
origin = '2011-07-15 13:00:00')
y

#note POSIXct this time
z <- data.frame(Date.Time, WindSpd)
z$Date.Time <- as.POSIXct(z$Date.Time, format = '%y%m%d%H%M', 
origin = '2011-07-15 13:00:00')
z
Run Code Online (Sandbox Code Playgroud)

显然这不是一个至关重要的问题,因为我找到了一个有效的解决方案.无论如何我想知道,因为我正试图成为一个更好的代码.在将整数转换为R日期类时,我做错了什么?另外,他们的好处与POSIXltvs 相关POSIXct吗?根据帮助文章,听起来唯一的区别是它们是如何存储的?

42-*_*42- 7

有一种as.POSIXct.numeric方法:

 > methods(as.POSIXct)
[1] as.POSIXct.date    as.POSIXct.Date    as.POSIXct.dates   as.POSIXct.default
[5] as.POSIXct.numeric as.POSIXct.POSIXlt
Run Code Online (Sandbox Code Playgroud)

它使用数字输入作为从原点偏移的秒数.

> as.POSIXct(1107151300, origin = '2011-07-15 13:00:00')
[1] "2046-08-14 19:01:40 PDT"
> as.POSIXct('1107151300', format = '%y%m%d%H%M', 
                          origin = '2011-07-15 13:00:00')
[1] "2011-07-15 13:00:00 PDT"
Run Code Online (Sandbox Code Playgroud)

所以,是的,你确实需要使用as.character.