我想找出一种方法将一天转换为小数,其中0表示1月1日,12月31日表示1.这里只有几天。我找了一些像here和here这样的解决方案,但这些解决方案似乎都不适合我的问题。我也对date_decimal
中的lubridate
函数抱有希望。我已经找到了一个解决方案,它涉及将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))
dplyr
管道,用于生成daydecimal
:
df %>%
mutate(Year=year(Date), daynum=yday(Date)) %>%
full_join(maxdaydf, by=c("Year")) %>%
mutate(daydecimal=daynum/maxdays)
但正如我所说,这是笨重的,涉及第二个数据帧,这是绝对不理想的。关于如何将某些日期转换为小数的任何建议?
答案 0 :(得分:2)
而不是date_decimal()
,您可以使用decimal_date()
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