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