微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

朱利安日期至今矢量

如何解决朱利安日期至今矢量

我有一个数据框,其中一列用于年份,另一列在儒略日(1-366,1-365,取决于年份)。我想知道如何有效地将DOY_start列设置为基于年份的日期(以计算leap年)。

我尝试使用as.Date(),as.POSIXct(),lubridate :: as_date()

但是我所有的尝试都失败了。下面是一个示例代码,该示例的生成数据与我的原始数据非常相似。

非常感谢您提供任何建议。

[warn] Ignored unkNown option { extends: "@wordpress/prettier-config" }.

all()(v0.3.0)于2020-09-18创建

解决方法

这是一个有趣的难题。我们知道as.POSIXlt包含年份中的日期,并且某些日期库将其转换为日期,但是我无法立即找到处理它的解析器。

然后,仅需日期即可。我们总是得到1月1日的日期。然后,所需的日期就是1月1日加上“一年中的天数”减去1。

yearyearday <- function(yr,yd) {
    base <- as.Date(paste0(yr,"-01-01")) # take Jan 1 of year
    day <- base + yd - 1
}

set.seed(42)  # make it reproducible
sample <- data.frame(year=1980:2020,doy=as.integer(rnorm(41,mean=91.1,sd=9.65)))

sample$date <- yearyearday(sample$year,sample$doy)

head(sample)
输出量
R> yearyearday <- function(yr,yd) {
+     base <- as.Date(paste0(yr,"-01-01")) # take Jan 1 of year
+     day <- base + yd - 1
+ }
R> 
R> set.seed(42)  # make it reproducible
R> sample <- data.frame(year=1980:2020,+                       doy=as.integer(rnorm(41,sd=9.65)))
R> 
R> sample$date <- yearyearday(sample$year,sample$doy)
R> 
R> head(sample)
  year doy       date
1 1980 104 1980-04-13
2 1981  85 1981-03-26
3 1982  94 1982-04-04
4 1983  97 1983-04-07
5 1984  95 1984-04-04
6 1985  90 1985-03-31
R> 

与日期计算一样,除基数R外,什么都不需要。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。