Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何将POSIX日期转换为一年中的某一天?_R_Datetime - Fatal编程技术网

R 如何将POSIX日期转换为一年中的某一天?

R 如何将POSIX日期转换为一年中的某一天?,r,datetime,R,Datetime,标题是:如何将POSIX日期转换为一年中的某一天?正如所揭示的那样,POSIXlt日期的$yday后缀(甚至是这样的向量)将转换为一年中的某一天。请注意,POSIX将1月1日计算为第0天,因此您可能希望将1添加到结果中 我尴尬地花了很长时间才找到这个,所以我想我会的 或者,优秀的lubridate包提供了yday函数,它只是上述方法的包装器。它方便地为其他单位定义了类似的函数(月,年,小时,…) 今天的另一种方法是使用strftime()格式化的“POSIXt”对象: R>今天 [1] “201

标题是:如何将POSIX日期转换为一年中的某一天?

正如
所揭示的那样,POSIXlt
日期的
$yday
后缀(甚至是这样的向量)将转换为一年中的某一天。请注意,POSIX将1月1日计算为第0天,因此您可能希望将1添加到结果中

我尴尬地花了很长时间才找到这个,所以我想我会的

或者,优秀的
lubridate
包提供了
yday
函数,它只是上述方法的包装器。它方便地为其他单位定义了类似的函数(
小时
,…)


今天的另一种方法是使用
strftime()
格式化
的“POSIXt”
对象:

R>今天
[1] “2012-10-19 19:12:04英国夏令时”
R> 多伊多伊
[1] "293"
R> as.numeric(doy)
[1] 293

在POSIX标准中,这比记住一年中的哪一天是零更可取。

我就是这样做的:

as.POSIXlt(c("15.4", "10.5", "15.5", "10.6"), format = "%d.%m")$yday
# [1] 104 129 134 160

我意识到这不是海报想要的,但我需要将POSIX日期时间转换为一年中的小数天,用于时间序列分析,并最终完成了以下工作:

today <- Sys.time()

doy2015f<-difftime(today,as.POSIXct(as.Date("2015-01-01 00:00", tzone="GMT")),units='days')

今天data.table
包还提供了一个
yday()
函数

require(data.table)

今天,我花了这么长时间的部分原因是,如果
d
是一个POSIXlt对象,
str(d)
没有表示
d
有任何其他属性。这以及
$
操作符在POSIXlt对象的向量上按元素工作意味着不仅仅是在进行常规提取。如果有人能推荐一个好的起点的话,我会有兴趣读更多关于这方面的内容。而且,作为对我自己评论的回应,
attributes
是我一直在寻找的命令,
attributes(d)
提供了显示
d
的所有方式。嘿,我也在努力解决这个问题。似乎是你自己回答的(而不是只做而不在这里发布)。谢谢你!请注意,这只适用于类为“POSIXlt”
的对象。另一个主要类是
“POSIXct”
,它以非常不同的方式存储在内部。例如,在
Sys.time()
的输出上尝试您的方法。
strftime()。似乎是时候将您的答案标记为已接受的答案了。@Gavin,是否也可以将日期转换为自指定数据起的天数,例如自2015年3月1日起的天数?我还可以作为一个新问题发布…。@B.Davis您可以做一些类似于
as.numeric(Sys.Date()-as.Date('2015-03-01',格式='%Y-%m-%d'))
的事情,但不适用于
POSIXlt
(如我的回答中所述)对象。例如,
Sys.time()$yday
不起作用。
as.POSIXlt(c("15.4", "10.5", "15.5", "10.6"), format = "%d.%m")$yday
# [1] 104 129 134 160
today <- Sys.time()

doy2015f<-difftime(today,as.POSIXct(as.Date("2015-01-01 00:00", tzone="GMT")),units='days')