所以我有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矩阵中。所以我读了一个文件,放入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乘200)文件作为一大堆矩阵。像数据框......但是我用这段代码得到了这个错误:
Error in data3[, , i] <- matrix(data2, ncol =200, nrow = 200) :
incorrect number of subscripts
有没有人对此编码有任何建议? 谢谢
答案 0 :(得分: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)
答案 1 :(得分:1)
一种笨拙的方式,无论如何仍然会产生预期的结果:
首先,读取您的数据不是作为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 ) )