1

したがって、24 個のファイルがあり、各ファイルには次のような 2D マトリックスがあります。

               V1        V2        V3        V4        V5        V6         V7     
1   0.9750000 0.9750000 0.9750000 1.1577778 1.1577778 1.1577778 1.32777778 1.32777778
2   0.6875000 0.6875000 0.6875000 0.7758333 0.7758333 0.7758333 1.19666667 1.19666667
3   0.6875000 0.6875000 0.6875000 0.7758333 0.7758333 0.7758333 1.19666667 1.19666667
4   0.6875000 0.6875000 0.6875000 0.7758333 0.7758333 0.7758333 1.19666667 1.19666667
5   0.9866667 0.9866667 0.9866667 1.2088889 1.2088889 1.2088889 1.43000000 1.43000000
6   0.9866667 0.9866667 0.9866667 1.2088889 1.2088889 1.2088889 1.43000000 1.43000000
7   0.9866667 0.9866667 0.9866667 1.2088889 1.2088889 1.2088889 1.43000000 1.43000000
8   0.9475000 0.9475000 0.9475000 1.1008333 1.1008333 1.1008333 1.36833333 1.36833333
9   0.9475000 0.9475000 0.9475000 1.1008333 1.1008333 1.1008333 1.36833333 1.36833333
10  0.9475000 0.9475000 0.9475000 1.1008333 1.1008333 1.1008333 1.36833333 1.36833333
11  1.0475000 1.0475000 1.0475000 1.0362500 1.0362500 1.0362500 1.20833333 1.20833333
12  1.0475000 1.0475000 1.0475000 1.0362500 1.0362500 1.0362500 1.20833333 1.20833333
13  1.0475000 1.0475000 1.0475000 1.0362500 1.0362500 1.0362500 1.20833333 1.20833333
14  0.6133333 0.6133333 0.6133333 0.5950000 0.5950000 0.5950000 0.63222222 0.63222222
15  0.6133333 0.6133333 0.6133333 0.5950000 0.5950000 0.5950000 0.63222222 0.63222222
16  0.6175000 0.6175000 0.6175000 0.5950000 0.5950000 0.5950000 0.60000000 0.60000000
17  0.6175000 0.6175000 0.6175000 0.5950000 0.5950000 0.5950000 0.60000000 0.60000000
18  0.6175000 0.6175000 0.6175000 0.5950000 0.5950000 0.5950000 0.60000000 0.60000000
19  0.5366667 0.5366667 0.5366667 0.5150000 0.5150000 0.5150000 0.49000000 0.49000000

そして、データを3Dマトリックスに入れたいです。そのため、1 つのファイルを読み取り、3D 配列に入れ、次のファイルを読み取り、新しいデータを最初のファイルに上書きしますが、書き換えはしません。

データ部分を読み取って、3D 配列を次のように設定しました。

k<-24
data<-array(0,dim=c(200,200,length(k))

200,200,24 は、基本的に各ファイル (40000 要素) および 24 ファイル内のデータ要素の数を表します。

次に、これを行います:

for (i in 1: length(k) {
    listing <- read.csv(datafiles[i])

データの次元は200 201なので、次のステップを実行して200 x 200にします

data2<- listing[,-1]

今は2D行列なので、先ほど作った3D配列に入れたいと思います。私はこのようにコーディングしました:

data3[,,i]<-matrix(data2, ncol=200,nrow=200)
}

したがって、データ フレームの読み取りと再形成が完了すると、24 個のデータ (200 x 200) ファイルが 1 つの大きな行列の山として取得されます。データのボックスのように......しかし、次のコードでこのエラーが発生します。

Error in data3[, , i] <- matrix(data2, ncol =200, nrow = 200) : 
  incorrect number of subscripts

誰でもこのコーディングについてアドバイスがありますか? ありがとうございました

4

2 に答える 2

4

ファイルが同じディレクトリにあると仮定します。次のように進めます

temp = list.files(pattern="*.csv")
named.list <- lapply(temp, read.csv)

200 x 200 x 24 配列を取得するには、これを続けます。

require(abind)
arr <- abind(named.list,along=3)
于 2013-03-02T06:12:33.893 に答える
1

それにもかかわらず、望ましい結果につながる abind のない不器用な方法は次のとおりです。

まず、データを data.frame としてではなくベクターとして読み込みます

dat1 <- as.vector( unlist( read.csv( "dat1.csv" ) ) )   
dat2 <- as.vector( unlist( read.csv( "dat2.csv" ) ) ) 
# and so on, or whatever for loop you are using

次に、それらを 960000 要素の 1 つのベクトルに連結します。

x <- c( dat1, dat2, ... )   # or whatever your names are

最後に、そのベクトルを目的の配列に変換します

x <- array( x, dim = c( 200, 200, 24 ) )
于 2013-03-02T07:48:35.803 に答える