R:使用窗口函数从csv文件中提取数据

时间:2017-03-12 22:13:54

标签: r csv

我有一个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'

如何更改代码以获取数据?谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

它对我有用。确保:

1-在创建ts对象

时,使用[, - 1]删除Year列

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创建时间序列对象提供了最清晰的输入。

相关问题