1

私はRプログラミング言語に比較的慣れていません。「TS1」、「TS2」、「TS3」などから「TS1000」までの時系列データの多数のリストを含むデータフレーム(「DFA」というタイトル)があります。これらを既存の XY グラフに線として追加する必要があり、単純なループ関数を使用してこれらの時系列の追加を自動化したいと考えています。次の簡単なコードを使用しました。

for (i in 1:1000) { 
    lines(DFA$year, DFA$ts[i], lty=1, col="grey", lwd=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")

他にも便利な方法があります (特に、by 列lapplyを通過する を使用します)。data.frame

于 2012-12-27T11:55:56.613 に答える