1

1 つのディレクトリに大量の csv ファイルがあります。これらのファイルには、2 つの列DatePrice. filenameoffilename.csvには、データ系列の一意の識別子が含まれています。これらの時系列データが Zoo オブジェクトである場合、マージされたデータ系列の欠損値を処理できることを理解しています。na.locf(merge() functionまた、 を使用すると、欠損値を最新の観測値で埋めることができることも理解しています。

の処理を自動化したい。

  1. *.csvファイルの列形式の日付と価格のデータを R データフレームに ロードします。
  2. マージされた動物園の「時系列のポートフォリオ」オブジェクト内のそれぞれの異なる時系列を確立し、それらのそれぞれに等しいアイデンティティを持ちます。
  3. を使用してこれらの動物園オブジェクトの時系列をマージしMergedData <- na.locf(merge( ))ます。

もちろん、最終的な目標はfPortfolioパッケージを使用することです。

次のステートメントを使用して、Date,Priceペアのデータ フレームを作成しました。このアプローチの問題は<filename>、ファイルから時系列データの識別子を失うことです。

  result <- lapply(files, function(x) x <- read.csv(x) )

これらすべてのステップをインスタンスごとに実行するために必要な R ステートメントを生成するコードを記述できることを理解しています。私がそれをする必要のないアプローチがあるかどうか疑問に思っています。他の人がこれと同じタスクを実行したくないとは信じがたいです。

4

2 に答える 2

2

これを試して:

z <- read.zoo(files, header = TRUE, sep = ",")
z <- na.locf(z)

のようなヘッダー行と行を想定してい2000-01-31,23.40ます。使用read.zooしている形式に対応するために必要な引数を使用してください。

于 2013-01-16T22:51:42.217 に答える
1

sapply(ファイル名を保持する)を使用すると、より適切な書式設定を行うことができます。ここで私は保持しlapplyます。

  1. すべてのファイルが同じディレクトリにあると仮定すると、list.files. このようなワークフローに非常に便利です。
  2. Zooオブジェクトを直接取得するために使用read.zooします(後で強制することは避けてください)

例えば:

zoo.objs <- lapply(list.files(path=MY_FILES_DIRECTORY,
                              pattern='^zoo_*.csv',    ## I look for csv files, 
                                                       ##   which names start with zoo_
                              full.names=T),           ## to get full names path+filename
                   read.zoo)

結果の名前を変更するためにnowlist.filesを再度使用します

 names(zoo.objs) <- list.files(path=MY_FILES_DIRECTORY,
                          pattern='^zoo_*.csv')
于 2013-01-16T21:32:52.570 に答える