拆分并随机重组一个时间序列,但在R中保持闰年
我需要创建用于未来50年建模的天气数据集。我计划通过使用历史天气数据(1980-2012年每日)来实现这一点,但将年份以随机顺序混合,然后用2014-2054年重新标记。然而,我不能完全随机,因为保持闰年很重要。我希望有尽可能多的数据集,这样我就可以得到模型对不同天气模式的平均响应 下面是一个历史数据的示例(除了每天都有数据)。我如何重新组合它,使年份以不同的顺序排列,但确保366天的年份(1980年、1984年、1988年)在未来的闰年(2016年、2020年、2024年、2028年、2052年)结束?然后至少再做50次拆分并随机重组一个时间序列,但在R中保持闰年,r,R,我需要创建用于未来50年建模的天气数据集。我计划通过使用历史天气数据(1980-2012年每日)来实现这一点,但将年份以随机顺序混合,然后用2014-2054年重新标记。然而,我不能完全随机,因为保持闰年很重要。我希望有尽可能多的数据集,这样我就可以得到模型对不同天气模式的平均响应 下面是一个历史数据的示例(除了每天都有数据)。我如何重新组合它,使年份以不同的顺序排列,但确保366天的年份(1980年、1984年、1988年)在未来的闰年(2016年、2020年、2024年、2028年、2052
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,使用替换进行采样。我再次开始使用此函数,因为我需要扩展数据集,并且根据数据排列方式,我遇到了一些问题。我在$