有没有一种简单的 R 习惯用语可以获取给定年份中所有日期的序列?我可以使用以下方法,它可以正常工作,但对于闰年来说不太好:
dtt <- as.Date( paste( as.character(year), "-1-1", sep="") ) + seq( 0,364 )
显然,我可以添加一行代码来过滤(year + 1)中的任何值,但我猜想有更简单的方法来实现这个目的。
在Dirk的指导下,我最终选择了这个:
getDays <- function(year){
seq(as.Date(paste(year, "-01-01", sep="")), as.Date(paste(year, "-12-31", sep="")), by="+1 day")
}
我很想知道反转序列和强制转换 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
对象要稍微快一些。
我需要类似的东西,但是对于一段日期范围,我想知道那一年有多少天。我想出了以下函数,它返回一个与输入日期长度相同的向量。
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)])
}
as.Date
后面加上-1
即可。 - James