首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >转换为R中一年中的日期和时间

转换为R中一年中的日期和时间
EN

Stack Overflow用户
提问于 2013-03-19 10:39:55
回答 3查看 1.9K关注 0票数 5

我有超过3年的数据。对于每一年,我希望找到与该年的Jaunary 1相对应的日期。例如:

代码语言:javascript
复制
> x <- c('5/5/2007','12/31/2007','1/2/2008')
> #Convert to day of year (julian date) –
> strptime(x,"%m/%d/%Y")$yday+1
[1] 125 365   2

我想知道如何做同样的事情,但随着时间的增加。但我还是有一天,而不是时间。有没有人能建议用哪种更好的方法找到有日期和时间的儒略历日期?

代码语言:javascript
复制
> x1 <- c('5/5/2007 02:00','12/31/2007 05:58','1/2/2008 16:25')
> #Convert to day of year (julian date) –
> strptime(x1,"%m/%d/%Y %H:%M")$yday+1
[1] 125 365   2

我想要以十进制天数表示的输出,而不是这个结果。例如,第一个示例是125.0833333,依此类推。

非常感谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-19 10:57:27

您是否希望获得一天+一天的一个数字部分作为输出?如果是这样的话,像这样的东西将会起作用:

代码语言:javascript
复制
test <- strptime(x1,"%m/%d/%Y %H:%M")

(test$yday+1) + (test$hour/24) + (test$min/(24*60))
#[1] 125.083333 365.248611   2.684028

虽然这符合您的要求,但我认为删除+1可能更有意义:

代码语言:javascript
复制
(test$yday) + (test$hour/24) + (test$min/(24*60))
#[1] 124.083333 364.248611   1.684028

尽管我的感觉有点麻木,Dirk将会出现,并向我展示如何使用POSIXct日期/时间表示来实现这一点。

下面是使用基函数来尝试这样一个答案:

代码语言:javascript
复制
mapply(julian, as.POSIXct(test), paste(format(test,"%Y"),"01","01",sep="-"))
#[1] 124.083333 364.248611   1.684028
票数 9
EN

Stack Overflow用户

发布于 2013-03-19 11:08:18

您还可以使用POSIXctPOSIXlt表示以及来自xtsfirstof函数。

代码语言:javascript
复制
x1 <- c("5/5/2007 02:00", "12/31/2007 05:58", "1/2/2008 16:25")
x1
## [1] "5/5/2007 02:00"   "12/31/2007 05:58" "1/2/2008 16:25"  


y <- as.POSIXlt(x1, format = "%m/%d/%Y %H:%M")

result <- mapply(julian, x = as.POSIXct(y), origin = firstof(y$year + 1900))

result
## [1] 124.083333 364.248611   1.684028

如果不想使用xts,那么可以使用下面这样的代码

代码语言:javascript
复制
result <- mapply(julian, 
                 x = as.POSIXct(x1, format = "%m/%d/%Y %H:%M", tz = "GMT"),
                 origin = as.Date(paste0(gsub(".*([0-9]{4}).*", "\\1", x1), 
                                         "-01-01"),
                                  tz = "GMT"))

result
## [1] 124.083333 364.248611   1.684028
票数 9
EN

Stack Overflow用户

发布于 2019-09-18 00:42:05

如果你想做相反的事情(将一年中的某一天转换为日期和时间),你可以使用这个小函数:

doy2date =函数(Mydoy){

mydate = as.Date(mydoy,origin = "2008-01-01 00:00:00",tz = "GMT")

dech = (mydoy - as.integer(mydoy)) * 24

myh = as.integer(dech)

mym = as.integer( (dech - as.integer(dech)) * 60)

mys =圆形(i(dech- as.integer(dech)) * 60) - mym) * 60),digits=0 )

posixdate =as.POSIXct(粘贴(mydate,“",myh,":",mym,":",mys,sep=""),tz = "GMT")

return(posixdate)

}

举个例子,如果你尝试:

doy2date(117.6364)

该函数将返回"2008-04-27 15:16:25 GMT“作为POSIXct。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15490614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档