使用R获取一年中所有日子的向量

时间:2011-08-24 14:10:41

标签: r date leap-year

是否有一个简单的R习惯用于获取给定年份的日期向量?除了闰年之外,我可以做以下事情,确实没问题。

dtt <- as.Date( paste( as.character(year), "-1-1", sep="") ) + seq( 0,364 )
显然,我可以添加一行来过滤掉(年+ 1)中的任何值,但我猜测有更短的方法可以做到这一点。

4 个答案:

答案 0 :(得分:20)

这个怎么样:

R> length(seq( as.Date("2004-01-01"), as.Date("2004-12-31"), by="+1 day"))
[1] 366
R> length(seq( as.Date("2005-01-01"), as.Date("2005-12-31"), by="+1 day"))
[1] 365
R> 

这使用了nuttin'但是基数R可以在日期上正确计算,以便为您提供向量。如果您想要更高级别的运营商,请查看在lubridate甚至是我的更基本的RcppBDT,它包含了Boost Time_Date库的部分内容。

答案 1 :(得分:7)

使用Dirk的指导我已经解决了这个问题:

getDays <- function(year){
     seq(as.Date(paste(year, "-01-01", sep="")), as.Date(paste(year, "-12-31", sep="")), by="+1 day")
}

答案 2 :(得分:0)

我有兴趣知道反转排序和转换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

要快一些

答案 3 :(得分:0)

我需要类似的东西,但是对于一系列日期我想知道那一年的天数。我想出了以下函数,它返回一个与输入日期长度相同的向量。

lubridate::year

它与Dirk的解决方案类似,但它使用$('#R0').on('change', function () { highchart.update({chart: {options3d: {alpha: this.value}}}); }); $('#R1').on('change', function () { highchart.update({chart: {options3d: {beta: this.value}}}); }); 函数将所有日期的年份部分两次。使用表与长度相同,但是对于所有独特年份。如果日期不是连续几年,它可能会使用比严格必要更多的内存。