我对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
答案 0 :(得分: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")
结果:
我认为这是解决这个问题的最有效方法。
另一种方法是在“year”中添加一个变量,并将数据从宽到长整形(但我不确定这对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")
还有其他方法(特别是使用lapply
,您可能会发现有用的data.frame
列)。