2014-02-21 61 views
0

我想按行添加數據(並按表)。然而,我下面嘗試的方法都沒有工作。我確信有一個非常簡單的答案,但它逃脫了我,我找不到通過搜索互聯網的答案。感謝您的任何建議。按行添加數據到陣列

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 

回答

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 

循環?我們不需要任何循環!

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排列第一個和第二個模糊。

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