1

所以我有 24 个文件,每个文件都有这样的二维矩阵:

               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 矩阵中。所以我读取一个文件,放入 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 到 200

data2<- listing[,-1]

现在它是 2D 矩阵,所以我想把它们放在我之前制作的 3D 数组中。我这样编码:

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

所以在我完成读取和重塑数据框后,我应该得到 24 个数据(200 x 200)文件作为一大堆矩阵。就像一盒数据......但是我用这段代码得到了这个错误:

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 个元素的向量

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

最后,将该向量转换为所需的数组

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