1

我对 R 编程语言比较陌生。我有一个数据框(标题为“DFA”),其中包含大量时间序列数据列表,标题为“TS1”、TS2”、TS3”等,直至“TS1000”。我需要将这些作为线添加到现有的 XY 图中,并希望通过使用简单的循环函数来自动添加这些时间序列。我使用了以下简单代码:

for (i in 1:1000) { 
    lines(DFA$year, DFA$ts[i], lty=1, col="grey", lwd=1) 
}

不幸的是,这什么也没产生?当我添加 1 行 1 行(即没有循环)时,它工作正常。任何人都可以帮助指出循环失败以帮助我自动化流程吗?非常感谢。菲尔

继上述初始帖子之后,DFA 数据帧的一部分如下所示(每个时间序列有 157 个点,有 1000 个时间序列):

    ts1 ts2 ts3 ts4
1   6871    6855    6843    6870
2   6872    6858    6848    6872
3   6873    6861    6854    6874
4   6874    6865    6859    6877
5   6876    6868    6864    6879
6   6877    6871    6869    6881
7   6879    6875    6874    6883
8   6880    6878    6879    6886
9   6882    6881    6884    6888
10  6883    6884    6889    6890
4

1 回答 1

3

如果我了解您的最终目标,这里不需要循环。相反,您可以将数据集转换为实际的时间序列数据集并绘制结果数据。

这是您提供的示例数据:

temp <- read.table(header = TRUE, text = "    ts1 ts2 ts3 ts4
1   6871    6855    6843    6870
2   6872    6858    6848    6872
3   6873    6861    6854    6874
4   6874    6865    6859    6877
5   6876    6868    6864    6879
6   6877    6871    6869    6881
7   6879    6875    6874    6883
8   6880    6878    6879    6886
9   6882    6881    6884    6888
10  6883    6884    6889    6890")

我们可以想象这个数据跨越 1990 年到 1999 年,并且是年度数据。

temp.ts <- ts(temp, start = 1990, end = 1999, frequency = 1)
plot(temp.ts, plot.type = "single")

结果:

在此处输入图像描述

我认为这是解决此问题的最有效方法。

另一种方法是为“年份”添加一个变量,并将数据从宽变长(但我不确定这将如何处理 1000 个时间序列变量)。基本方法是这样的:

temp$year <- seq(1990, length.out=10)
temp1 <- reshape(temp, direction = "long", idvar="year", 
                 varying=names(temp)[grepl("ts", names(temp))], sep ="")
plot(temp1$year, temp1$ts, type = "l")

还有其他方法(特别是 using lapply,它将通过您data.frame的 by 列)您可能会觉得有用。

于 2012-12-27T11:55:56.613 回答