【问题标题】:R Time Series plot.ts()R 时间序列 plot.ts()
【发布时间】:2015-07-13 16:29:27
【问题描述】:

我正在尝试阅读时间序列并执行 plot.ts(),但是我得到了奇怪的结果。也许我做错了什么。我尝试包括开始日期和结束日期,但输出仍然错误。 任何帮助表示赞赏。谢谢。

这是代码和输出:

sales1 <- read.csv("TimeS.csv",header=TRUE)
sales1

salesT <- ts(sales1)
salesT
plot.ts(salesT)

output:
> sales1 <- read.csv("TimeS.csv",header=TRUE)
> sales1

  year  q1  q2  q3  q4
1 1991 4.8 4.1 6.0 6.5
2 1992 5.8 5.2 6.8 7.4
3 1993 6.0 5.6 7.5 7.8
4 1994 6.3 5.9 8.0 8.4

> salesT <- ts(sales1)
> salesT

Time Series:
Start = 1 
End = 4 
Frequency = 1 
  year  q1  q2  q3  q4
1 1991 4.8 4.1 6.0 6.5
2 1992 5.8 5.2 6.8 7.4
3 1993 6.0 5.6 7.5 7.8
4 1994 6.3 5.9 8.0 8.4

> plot.ts(salesT)

 It looks like I can't paste the plot.  instead of 1 graph it has 5 separate    
 plots stacked onto each other.

【问题讨论】:

  • 发布str(sales1)dput(sales1[1:5,])的结果
  • > str(sales1) 'data.frame': 4 obs。 5 个变量: $ 年:int 1991 1992 1993 1994 $ q1:num 4.8 5.8 6 6.3 $ q2:num 4.1 5.2 5.6 5.9 $ q3:num 6 6.8 7.5 8 $ q4:num 6.5 7.4 7.8 8.4
  • > dput(sales1[1:5,]) structure(list(year = c(1991L, 1992L, 1993L, 1994L, NA), q1 = c(4.8, 5.8, 6, 6.3, NA), q2 = c(4.1, 5.2, 5.6, 5.9, NA), q3 = c(6, 6.8, 7.5, 8, NA), q4 = c(6.5, 7.4, 7.8, 8.4, NA)), .名称 = c("year", "q1", "q2", "q3", "q4"), row.names = c("1", "2", "3", "4", "NA" ), class= "data.frame") >
  • 你没有一个系列,你有一张桌子。因此sales1 &lt;- sales1[,-1]; sales1 &lt;- unlist(sales1)将矩阵转换为向量
  • 我对此表示赞同,因为考虑到所有“解决方案”,包括我的原始解决方案(我已修复它)和另一个原始解决方案(此后已修复为好)错了。

标签: r plot timeserieschart


【解决方案1】:

试试这个

salesT<-ts(unlist(t(sales1[,-1])),start=c(1991,1),freq=4)

【讨论】:

    【解决方案2】:

    原始数据的格式很难直接用于时间序列。你可以试试这个:

    sales1 <- t(sales1[,-1])
    sales1 <- as.vector(sales1)
    my_ts <- ts(sales1, frequency = 4, start=c(1991,1))
    plot.ts(my_ts)
    

    【讨论】:

    • 谢谢。现在可以了。原始数据集只有 3 列:year、qtr、sales,我遇到了问题,所以我转置了它,但它没有用。如果它只有 3 列,你会怎么做?
    • 如果我有一个包含三列的列表:年份、季度、销售额,并且如果年份和季度的数据按时间顺序排列,我可能会用 sales &lt;- sales[,-c(1:2), drop=T] 省略前两列并使用与上面相同的代码。我认为'unlist() 命令是没有必要的。您可能希望确保您的列表中没有空白,例如几年或几个季度的缺失条目,以避免不愉快的意外。
    • 谢谢,我会试试,让你知道结果。
    • 我在原始答案中犯了一个错误,因为我没有意识到必须转置原始矩阵或数据框。 R 的默认读取顺序是按列排列的。请注意相应的更改,尤其是t()as.vector() 的使用。很抱歉造成混乱。
    【解决方案3】:

    这里我认为你需要正确格式化它试试这个:

    salesT <- ts(sales1)
    
    ts.plot(salesT, frequency = 4, start = c(1991, 1), end = c(1994, 4)))
    

    【讨论】:

    • 我试过了,2条直线和2个三角形的情节看起来很奇怪
    【解决方案4】:

    这条线正在把时代变成你想要的不太可能的系列之一:

    > salesT <- ts(sales1)
    

    我们需要转置数据帧,以便它跨行而不是向下读取,我们使用c 将结果矩阵转换为形成系列数据部分的向量。 (图表后续)

    # create sales1
    Lines <- "year  q1  q2  q3  q4
    1 1991 4.8 4.1 6.0 6.5
    2 1992 5.8 5.2 6.8 7.4
    3 1993 6.0 5.6 7.5 7.8
    4 1994 6.3 5.9 8.0 8.4"
    sales1 <- read.table(text = Lines, header = TRUE)
    
    # convert to ts and plot
    salesT <- ts(c(t(sales1[-1])), start = sales1[1, 1], freq = 4)
    plot(salesT)
    

    关于评论,如果数据看起来像这样,那么它更直接,下面的行将产生上面的图。我们假设数据已排序并从年初开始,因此我们不需要使用第二列:

    Lines2 <- "year qtr sales
    1  1991  q1   4.8
    2  1991  q2   4.1
    3  1991  q3   6.0
    4  1991  q4   6.5
    5  1992  q1   5.8
    6  1992  q2   5.2
    7  1992  q3   6.8
    8  1992  q4   7.4
    9  1993  q1   6.0
    10 1993  q2   5.6
    11 1993  q3   7.5
    12 1993  q4   7.8
    13 1994  q1   6.3
    14 1994  q2   5.9
    15 1994  q3   8.0
    16 1994  q4   8.4"
    sales2 <- read.table(text = Lines2, header = TRUE)
    
    salesT2 <- ts(sales2$sales, start = sales2$year[1], freq = 4)
    plot(salesT2)
    

    更新已修复。添加了对 cme​​ts 的响应。

    【讨论】:

    • 感谢您的帮助。我必须尝试使用​​只有 3 列的原始数据集:years、qtr、sales。我无法让它工作,所以我把它从原来的地方转了过来。
    • 如果您只有三列,它会更直接。见最后补充。
    猜你喜欢
    • 2015-03-28
    • 1970-01-01
    • 2020-02-03
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 2020-09-15
    相关资源
    最近更新 更多