拆分并随机重组一个时间序列,但在R中保持闰年

拆分并随机重组一个时间序列,但在R中保持闰年,r,R,我需要创建用于未来50年建模的天气数据集。我计划通过使用历史天气数据(1980-2012年每日)来实现这一点,但将年份以随机顺序混合,然后用2014-2054年重新标记。然而,我不能完全随机,因为保持闰年很重要。我希望有尽可能多的数据集,这样我就可以得到模型对不同天气模式的平均响应 下面是一个历史数据的示例(除了每天都有数据)。我如何重新组合它,使年份以不同的顺序排列,但确保366天的年份(1980年、1984年、1988年)在未来的闰年(2016年、2020年、2024年、2028年、2052

我需要创建用于未来50年建模的天气数据集。我计划通过使用历史天气数据(1980-2012年每日)来实现这一点,但将年份以随机顺序混合,然后用2014-2054年重新标记。然而,我不能完全随机,因为保持闰年很重要。我希望有尽可能多的数据集,这样我就可以得到模型对不同天气模式的平均响应

下面是一个历史数据的示例(除了每天都有数据)。我如何重新组合它,使年份以不同的顺序排列,但确保366天的年份(1980年、1984年、1988年)在未来的闰年(2016年、2020年、2024年、2028年、2052年)结束?然后至少再做50次

year          day           radn          maxt      
 1980          1             5.827989     -1.59375      
 1980          2             5.655813     -1.828125     
 1980          3             6.159346     -0.96875   
 1981          4             6.065136     -1.84375    
 1981          5             5.961181     -2.34375     
 1981          6             5.758733     -2.0625       
 1981          7             6.458055     -2.90625     
 1982          8             6.73056      -2.890625   
 1982          9             6.89472      -1.796875    
 1983          10            6.687879     -2.140625     
 1984          11            6.585833     -1.609375     
 1984          12            6.466392     -0.71875      
 1984          13            7.100092     -0.515625      
 1985          14            7.176402     -1.734375    
 1985          15            7.236122     -2.5         
 1985          16            7.455515     -2.375       
 1986          17            7.395174     -1.390625    
 1986          18            7.341537     -2.21875    
 1987          19            7.678102     -2.828125   
 1987          20            7.539239     -2.875        
 1987          21            7.231031     -2.390625    
 1988          22            7.397067     -0.21875     
 1988          23            7.947912     -0.5         
 1989          24            8.355059     -1.03125      
 1990          25            8.145792     -1.5         
 1990          26            8.591616     -2.078125  

下面是一个函数,它对已传递数据帧df的年份进行置乱,返回一个新数据帧:

scramble.years = function(df) {
  # Build convenience vectors of years
  early.leap = seq(1980, 2012, 4)
  late.leap = seq(2016, 2052, 4)
  early.nonleap = seq(1980, 2012)[!seq(1980, 2012) %in% early.leap]
  late.nonleap = seq(2014, 2054)[!seq(2014, 2054) %in% late.leap]

  # Build map from late years to early years
  map = data.frame(from=c(sample(early.leap, length(late.leap), replace=T),
                          sample(early.nonleap, length(late.nonleap), replace=T)),
                   to=c(late.leap, late.nonleap))

  # Build a new data frame with the correct years/days for later period
  return.list = lapply(2014:2054, function(x) {
     get.df = subset(df, year == map$from[map$to == x])
     get.df$year = x
     return(get.df)
  })
  return(do.call(rbind, return.list))
}

您可以调用
scramble.years
任意次数以获得新的加扰数据帧。

考虑到2000年是闰年,您可以不加4的倍数。1980-2012年是33年,但2014-2054年是41年。您是否使用替换进行采样?是的,@josilber,使用替换进行采样。我再次开始使用此函数,因为我需要扩展数据集,并且根据数据排列方式,我遇到了一些问题。我在$