1

.CSV 形式で 200 行と 5 列の大規模なデータ セットがあります。ここにデータセットの一部があります:

 4.1    1.2 47.3    10954   51
 3.4    1.5 0.5 1   5316
 0.3    30.1    1.2 10  875
 0.2    0.4 119 0   0
   0    52.6    0.1 0   3.1
   0    0.3 880 0   0
   0    0.1 148 180 0
   0    0.1 490.2   0   0.4
   0    1.1 0.2 0.6 0.9
   0    0   0   0   0

各 10 行を個別に読み取り、for ループを使用して行列 (10 x 5) に格納するコードを書きたいと思います。最後に、それぞれ 20 個の行列 (10*5) があります。これはコマンドラインです:

all.data   <- read.csv("C:\\Users\\Desktop\\myarray.csv",header=FALSE)#read whole data
for (k in 1:20){   
data_temp.k <- array(NA, dim=c(10,5))
  for( i in 1:10 ){
    for( j in 1:5 ) {
        data_temp.k[i,j] <- all.data[(k-1)*10:k*10,j]
    }
  }
}
write.csv(data_temp.k,"mymatrix.k")

この問題は、「k」と、ここでのマトリックスインデックスとカウンターの両方としての二重機能に何らかの形で関連していることを知っています。

4

3 に答える 3

5

これにはループを使用しないでください。行のインデックスを使用してください。

## Sample data
set.seed(1)
m <- matrix(rnorm(1000),nrow=200,ncol=5)
## Generate indices to keep
indices <- seq(1,nrow(m), by=10)
## Subset matrix rows
m[indices,]
于 2013-10-22T20:49:58.487 に答える
2

arrayこれはおそらく、 s を使用apermしてマトリックスをチャンクに分割し、すべてbaseR ベクトル化された関数を使用して形状を変更する方法の優れたデモンストレーションになること以外には、あまり追加されません。を使用して、いつでも配列の各次元に関数を適用できますapply

#  Sample data
m <- matrix( 1:16 , 4 , 4 )
#     [,1] [,2] [,3] [,4]
#[1,]    1    5    9   13
#[2,]    2    6   10   14
#[3,]    3    7   11   15
#[4,]    4    8   12   16

# Use array() to turn into arrays and aperm() to transpose the 3D array t0 the result you expect
out <- aperm( array( t(m) , c(4,2,2) ) , c(2,1,3) )
#, , 1
#     [,1] [,2] [,3] [,4]
#[1,]    1    5    9   13
#[2,]    2    6   10   14

#, , 2
#     [,1] [,2] [,3] [,4]
#[1,]    3    7   11   15
#[2,]    4    8   12   16

'apply' などを使用して、3 次元に関数を適用できます。

#  Sum all the elements in each of the third dimension of your arrays
apply( out , 3 , sum )
#[1] 60 76
于 2013-10-22T21:46:26.797 に答える