逐行向数组添加数据

时间:2014-02-21 23:36:11

标签: arrays r

我想按行(和工作表)将数据添加到数组中。但是,我在下面尝试过的方法都不起作用。我确信有一个非常简单的答案,但它逃脱了我,我无法通过搜索互联网找到答案。谢谢你的任何建议。

I <- 4 # rows
J <- 2 # columns
K <- 3 # sheets

my.data <- array( 0 , c(I,J,K))

sheet1 <- c(2,5)
sheet2 <- c(7,1)
sheet3 <- c(4,4)

# desired result
#
# , , 1
# 
#      [,1] [,2]
# [1,]    2    5
# [2,]    2    5
# [3,]    2    5
# [4,]    2    5
# 
# , , 2
# 
#      [,1] [,2]
# [1,]    7    1
# [2,]    7    1
# [3,]    7    1
# [4,]    7    1
# 
# , , 3
# 
#      [,1] [,2]
# [1,]    4    4
# [2,]    4    4
# [3,]    4    4
# [4,]    4    4

这些都不起作用:

my.data <- array( 0 , c(I,J,K)) ; my.data[1:I,    , 1] <- sheet1 ; my.data
my.data <- array( 0 , c(I,J,K)) ; my.data[,    1:J, 1] <- sheet1 ; my.data
my.data <- array( 0 , c(I,J,K)) ; aperm(my.data[1:I,,1], perm=sheet1)  ; my.data

3 个答案:

答案 0 :(得分:1)

如果您未通过替换创建my.data,则可以尝试:

sheets <- list(sheet1, sheet2, sheet3)
vapply(sheets, rep, matrix(numeric(), ncol=J, nrow=I), each=I)

否则:

my.data <- array( 0 , c(J,I,K))
my.data[, , 1] <- sheet1
my.data[, , 2] <- sheet2
my.data[, , 3] <- sheet3
aperm(my.data, c(2, 1, 3))

请注意我是如何切换JI的。您需要这样做,因为矢量回收是在列基础上完成的(即填充一列,然后再循环)。通过创建转换尺寸为1和2的数组,您可以允许您的值对优雅地循环(即第一个值到第一行,第二个到第二个)。

完成后,您可以使用aperm置换第1和第2个dims,就像您尝试过的那样。

答案 1 :(得分:1)

您希望每个值重复4次,因此请使用rep()[<-

 my.data[ , , 1:3] <- rep( c(sheet1,sheet2, sheet3), each=4) 
> my.data
, , 1

     [,1] [,2]
[1,]    2    5
[2,]    2    5
[3,]    2    5
[4,]    2    5

, , 2

     [,1] [,2]
[1,]    7    1
[2,]    7    1
[3,]    7    1
[4,]    7    1

, , 3

     [,1] [,2]
[1,]    4    4
[2,]    4    4
[3,]    4    4
[4,]    4    4

循环?我们不需要没有steenking循环!

答案 2 :(得分:0)

这是一种可能的方法,但它使用嵌套的for-loops

I <- 4 # rows
J <- 2 # columns
K <- 3 # sheets

my.data <- array( 0 , c(I,J,K))

sheet1 <- c(2,5)
sheet2 <- c(7,1)
sheet3 <- c(4,4)

for(i in 1:I) { 
     for(j in 1:J) { 
          for(k in 1:K)  { 

              if (k == 1) (my.data[i,j,k] = sheet1[j]) 
              if (k == 2) (my.data[i,j,k] = sheet2[j])
              if (k == 3) (my.data[i,j,k] = sheet3[j])

                         }
                   }
              }

my.data

, , 1

     [,1] [,2]
[1,]    2    5
[2,]    2    5
[3,]    2    5
[4,]    2    5

, , 2

     [,1] [,2]
[1,]    7    1
[2,]    7    1
[3,]    7    1
[4,]    7    1

, , 3

     [,1] [,2]
[1,]    4    4
[2,]    4    4
[3,]    4    4
[4,]    4    4