我有一个csv数据文件https://github.com/user59036/first/blob/master/dataFraserRiver.csv
我希望使用功能窗口创建两个数据集。
第一组数据是1990年1月至2008年12月,第二组是2009年1月至2010年12月。
datRiver <- read.csv("dataFraserRiver.csv")
datRiverTest <-ts(datRiver)
window(datRiver,start=c(1990,1),end = c(2008,12),frequency=12)
我一直收到错误:
'frequency' not changed'end' value not changedError in
window.default(x, ...) : 'start' cannot be after 'end'
如何更改代码以获取数据?谢谢你的帮助。
答案 0 :(得分:1)
它对我有用。确保:
1-在创建ts
对象
2-您可以在ts
来电
3-您在窗口调用中使用datRiverTest而不是datRiver
datRiverTest <-ts(c(t(datRiver[,-1])), start=c(1912,1), end=c(2010,12), frequency = 12)
window(datRiverTest,start=c(1990,1),end = c(2008,12),frequency=12)
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1990 1210 841 926 3000 5050 8760 6270 3340 1790 1520 2110 1190
1991 867 1560 1060 2690 5810 6910 6270 4330 2730 1560 1370 1110
1992 1090 1180 1770 2950 4800 5940 3870 2550 1960 2190 1740 853
1993 662 668 751 1940 5620 4930 3640 2900 1760 1060 1050 828
1994 819 709 1160 3600 5970 5960 5200 2900 1580 1350 857 814
1995 654 837 765 1900 4450 5880 4030 3500 1870 1730 2080 1560
1996 1120 947 1120 3080 4070 6750 6400 3780 2610 2130 1860 1210
1997 1040 938 1080 2580 7420 9580 7310 4440 2490 3270 2510 1320
1998 949 922 1050 1790 5730 4990 3910 2680 1490 1390 1180 839
1999 827 738 759 2390 5220 8910 8640 5250 2630 1610 1940 1230
2000 872 751 728 1980 4270 6740 6520 3730 2840 1920 1760 812
2001 754 580 537 1220 3620 5740 5110 3890 2000 1480 1600 924
2002 922 719 576 1800 5490 9300 6740 2960 2330 2160 1300 863
2003 698 665 735 2060 3700 6450 4430 2720 1630 2280 1560 836
2004 752 656 801 2440 4390 5380 3860 2530 3210 2270 2450 1690
2005 1780 2200 1730 2370 5470 6110 5040 2830 1900 2420 1970 1240
2006 1410 985 814 1910 4470 5900 3750 2270 1380 924 1410 860
2007 766 733 1420 2780 5500 8270 6100 3260 2040 2340 2400 1390
2008 935 847 848 1100 5990 7200 4980 3300 2370 1510 1750 1100
答案 1 :(得分:1)
如果删除年份列,它可以工作。并将data.frame转换为转置矩阵。最后转换为vector
。
datvec <- c(t(datRiver[-1]))
dat_ts <- ts(datvec, start = c(1912, 1), end = c(2010, 12), frequency = 12)
window(dat_ts, start = c(1990, 1), end = c(2008, 12))
# Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
# 1990 1210 841 926 3000 5050 8760 6270 3340 1790 1520 2110 1190
# 1991 867 1560 1060 2690 5810 6910 6270 4330 2730 1560 1370 1110
# 1992 1090 1180 1770 2950 4800 5940 3870 2550 1960 2190 1740 853
# 1993 662 668 751 1940 5620 4930 3640 2900 1760 1060 1050 828
# 1994 819 709 1160 3600 5970 5960 5200 2900 1580 1350 857 814
# 1995 654 837 765 1900 4450 5880 4030 3500 1870 1730 2080 1560
# 1996 1120 947 1120 3080 4070 6750 6400 3780 2610 2130 1860 1210
# 1997 1040 938 1080 2580 7420 9580 7310 4440 2490 3270 2510 1320
为什么删除第一列?因为该函数如何知道那些年份不是实际值?为什么要转换成矩阵?因为数据帧的列表格式在用作时间序列时会产生问题。为何选择转置?因为当矩阵变成向量时,它按列排序,但数据按行排列。为什么要转换为矢量?因为此格式为使用ts
创建时间序列对象提供了最清晰的输入。