2

多くのファイルを読み込んでこれらのファイルを処理する必要があることに関係する R 関連の質問があります。各ファイルは、異なるステーションで異なる時間に行われたオゾンの測定値です。データはテーブル形式であり、次を使用してデータを読み取ることができます。

files <- list.files()
data  <- lapply(files, read.table, skip=19)

これにより、処理したいすべてのファイルのデータ フレームが得られます。たとえば、ファイルの名前は次のとおりです。

> head(files)
 [1] "fiji_19980105.dat" "fiji_19980112.dat" "fiji_19980119.dat"
 [4] "fiji_19980130.dat" "fiji_19980206.dat" "fiji_19980213.dat"

"fiji" は駅の名前で、日付は YMD 形式です。データ フレームを平均して、このステーションの月間平均を取得したいと考えています (一度に作業する必要があるのは 1 つのステーションだけなので、実際には data と呼ばれるデータ フレームを平均して 12 セットの平均データを生成したいだけです)。

いくつかの ?apply 関数を使用してこれを行うことができると思いますが、これを行う方法について本当に迷っています。解決策に関する提案は本当に感謝しています!

日付をデータ フレームに追加した結果の例として、次のようになります。

> head(dat)
V1     V2    V3   V4 V5   V6    V7   V8   V9  V10       Date
1 9000 1007.7 0.006 29.6 74 0.59 0.006 9000 9000 9000 1998-01-05
2 9000 1005.2 0.028 29.3 75 0.62 0.006 9000 9000 9000 1998-01-05
3 9000 1001.6 0.060 28.5 78 0.63 0.006 9000 9000 9000 1998-01-05

 > str(dat)
'data.frame':   153994 obs. of  11 variables:
 $ V1  : int  9000 9000 9000 9000 9000 9000 9000 9000 9000 9000 ...
 $ V2  : num  1008 1005 1002 997 993 ...
 $ V3  : num  0.006 0.028 0.06 0.104 0.14 0.169 0.198 0.238 0.271 0.301 ...
 $ V4  : num  29.6 29.3 28.5 27.9 27.6 27.2 27 26.6 26.2 26 ...
 $ V5  : int  74 75 78 79 80 81 82 84 85 85 ...
 $ V6  : num  0.59 0.62 0.63 0.68 0.69 0.7 0.72 0.74 0.75 0.76 ...
 $ V7  : num  0.006 0.006 0.006 0.007 0.007 0.007 0.007 0.008 0.008 0.008 ...
 $ V8  : num  9000 9000 9000 9000 9000 9000 9000 9000 9000 9000 ...
 $ V9  : num  9000 9000 9000 9000 9000 9000 9000 9000 9000 9000 ...
 $ V10 : num  9000 9000 9000 9000 9000 9000 9000 9000 9000 9000 ...
 $ Date: Date, format: "1998-01-05" "1998-01-05" ...
4

1 に答える 1

1

ファイルのリストを使用して、Datesを取得します。

datetimes = as.Date(files, "fiji_%Y%m%d")

フォーマット テンプレートの詳細については、を参照?strptimeしてください。基本的に、他の値をリテラル フィラーとして含めることができ、重要でない末尾の文字は無視できます。

残りの部分では、各 data.frame の内容についてより多くの情報を提供する必要があるため、それらのデータについてより多くの情報を提供してください。

これらの日付スタンプを各行に追加して 1 つの大きな data.frame を作成し、そこから移動することをお勧めします。

これを取得するには、次のようにします (「data」ではなく「dat」と呼ばれていると想像してください):

dat = lapply(files, read.table, skip=19)

for (i in 1:length(files)) {
    dat[[i]]$Date = rep(datetimes[i], nrow(dat[[i]])

}

dat = do.call("rbind", dat)

次に、使用format(dat$Date, "%m")して、月のみを含む各日付の値を取得し、tapplyそれを集計関数 (例: mean) で取得できます。plyr間違いなくすぐに登場する、これのあまり古典的なバージョンはありません. :)

lapply で呼び出すのはおそらく良い考えではないread.tableので、それも変更して、各 I/O と data.frames のマージの基本的なチェックを入れることができるようにします。

于 2012-05-16T08:09:30.043 に答える