跨越多个闰年的小数日期对象
Date objects in decimals spanning multiple leap years
我想找出一种方法将一天转换为小数,其中 0 是 1 月 1 日,12 月 31 日是 1。这里没有时间,只有几天。我寻找了一些解决方案,例如 here and here,但这些解决方案似乎都不适合我的问题。我也对 lubridate
中的 date_decimal
函数抱有希望。我想出了一个解决方案,涉及将 Date
转换为数字,合并一个计算闰年的数据框,然后将该数字除以一年中的总天数。
library(lubridate)
library(dplyr)
df <- data.frame(Date=seq(as.Date("2003/2/10"), as.Date("2007/2/10"), "years"),
var=seq(1,5, by=1))
lubridate
函数尝试:
date_decimal(df$Date)
闰年数据框
maxdaydf<-data.frame(Year=seq(2003,2007,by=1), maxdays=c(365,366,365,365,365))
A dplyr
管道生成 daydecimal
:
df %>%
mutate(Year=year(Date), daynum=yday(Date)) %>%
full_join(maxdaydf, by=c("Year")) %>%
mutate(daydecimal=daynum/maxdays)
但正如我所说,这很笨拙并且涉及到第二个数据帧,这从来都不是理想的。关于如何将一些日期转换为小数有什么建议吗?
您可以使用 decimal_date()
而不是 date_decimal()
decimal_date(df$Date)
[1] 2003.110 2004.109 2005.110 2006.110 2007.110
或者您可以使用:
yday(df$Date)/yday(ISOdate(year(df$Date), 12,31))
[1] 0.1123288 0.1120219 0.1123288 0.1123288 0.1123288
我想找出一种方法将一天转换为小数,其中 0 是 1 月 1 日,12 月 31 日是 1。这里没有时间,只有几天。我寻找了一些解决方案,例如 here and here,但这些解决方案似乎都不适合我的问题。我也对 lubridate
中的 date_decimal
函数抱有希望。我想出了一个解决方案,涉及将 Date
转换为数字,合并一个计算闰年的数据框,然后将该数字除以一年中的总天数。
library(lubridate)
library(dplyr)
df <- data.frame(Date=seq(as.Date("2003/2/10"), as.Date("2007/2/10"), "years"),
var=seq(1,5, by=1))
lubridate
函数尝试:
date_decimal(df$Date)
闰年数据框
maxdaydf<-data.frame(Year=seq(2003,2007,by=1), maxdays=c(365,366,365,365,365))
A dplyr
管道生成 daydecimal
:
df %>%
mutate(Year=year(Date), daynum=yday(Date)) %>%
full_join(maxdaydf, by=c("Year")) %>%
mutate(daydecimal=daynum/maxdays)
但正如我所说,这很笨拙并且涉及到第二个数据帧,这从来都不是理想的。关于如何将一些日期转换为小数有什么建议吗?
您可以使用 decimal_date()
date_decimal()
decimal_date(df$Date)
[1] 2003.110 2004.109 2005.110 2006.110 2007.110
或者您可以使用:
yday(df$Date)/yday(ISOdate(year(df$Date), 12,31))
[1] 0.1123288 0.1120219 0.1123288 0.1123288 0.1123288