使用R获得一年中所有日子的矢量
问题描述:
是否有一个简单的R习惯用于获得给定年份中的日期向量?我可以做这做OK ...除了闰年如下:使用R获得一年中所有日子的矢量
dtt <- as.Date(paste(as.character(year), "-1-1", sep="")) + seq(0,364)
我,很明显,加线(年+ 1)过滤掉任何值,但我猜有一个多更短的方式来做到这一点。
答
利用德克的指导下,我看中了这个:
getDays <- function(year){
seq(as.Date(paste(year, "-01-01", sep="")), as.Date(paste(year, "-12-31", sep="")), by="+1 day")
}
+1
我是一个坦荡的家伙;) –
答
我很想知道这是否会更快反转测序和铸造as.Date
:
# My function getDays
getDays_1 <- function(year) {
d1 <- as.Date(paste(year, '-01-01', sep = ''));
d2 <- as.Date(paste(year, '-12-31', sep = ''));
as.Date(d1:d2, origin = '1970-01-01');
};
# other getDays
getDays_2 <- function(year) {
seq(as.Date(paste(year, '-01-01', sep='')),
as.Date(paste(year, '-12-31', sep='')),
by = '+1 day');
};
test_getDays_1 <- function(n = 10000) {
for(i in 1:n) {
getDays_1(2000);
};
};
test_getDays_2 <- function(n = 10000) {
for(i in 1:n) {
getDays_2(2000);
};
};
system.time(test_getDays_1());
# user system elapsed
# 4.80 0.00 4.81
system.time(test_getDays_2());
# user system elapsed
# 4.52 0.00 4.53
我可能不会 。 。 。看来测序Date
对象比将整数向量转换为Date
s
答
要快一些,但是对于一系列日期,我想知道当年的天数。我想出了以下函数,它返回一个与输入中的日期长度相同的向量。
days_in_year <- function(dates) {
years <- year(dates)
days <- table(year(seq(as.Date(paste0(min(years), '-01-01')),
as.Date(paste0(max(years), '-12-31')),
by = '+1 day')))
as.vector(days[as.character(years)])
}
它的工作原理类似德克的解决方案,但是它使用lubridate::year
函数来获取所有日期的年份部分的两倍。使用表格和长度一样,但是对于所有独特的年份。如果日期不是连续的年份,它可能会使用更多的内存而不是绝对必要的内存。
只需在第二个'as.Date'后添加'-1'。 – James
不错,没有想到这一点。这将确实解决它。想想看,我可以只使用20xx-12-31。 –