如何以子块方式使用来自另一个数组的值来填充数组?

时间:2015-05-27 10:30:47

标签: arrays r

我在下面给出了一个数组:

d <- array(0, c(750,760))

和数据框&#34; t&#34;如下:

str(t)    
'data.frame':   22800 obs. of  2 variables:
     $ Class1: num  6 4 2 1 2 2 2 3 2 2 ...
     $ Class2: num  19 21 23 24 23 23 23 22 23 23 ...

因为在t数据帧中观察的数量是22800,所以让i = 22800,这里

sum of Class 1[i] and Class2[i] is always 25

现在我想填充数组d,这样它每次只填充一个5 * 5的数组d,每次首先填充1,它应填充的次数将来自Class1的第i个元素的值,所以如果第i个元素是6然后它应该将5 * 5填充为6次,类似地对于Class2&#34; 2&#34;十九次。

编辑:t <- data.frame(Class1= c(6 {1st location 1,1},4,2..7{last observation}), Class2=c(19,21,23...18{last observation})的预期输出...用逗号来表示块之间的分隔。问题是如果我们将Class1 [1]视为一个位置,它有2个值,它们来自1类,19个来自2类。它是一个卫星图像像素,具有两个不同的像素类。

1 1 1 1 1 "1 1 1 1 2 "1 1 2 2 2 . . . . .750th 
1 2 2 2 2  2 2 2 2 2  2 2 2 2 2 . . . . .
2 2 2 2 2  2 2 2 2 2  2 2 2 2 2 . . . . . 
2 2 2 2 2  2 2 2 2 2  2 2 2 2 2 . . . . .
2 2 2 2 2  2 2 2 2 2  2 2 2 2 2 . . . . .
1 1 1 1 1
1 1 2 2 2
2 2 2 2 2
2 2 2 2 2
2 2 2 2 2
. . . . .                       1 1 1 1 1[Last block]                     
. . . . .                       1 1 2 2 2
. . . . .                       2 2 2 2 2
. . . . .                       2 2 2 2 2
. . . . .                       2 2 2 2 2
760th

以这种方式,它将以水平方式填充5 * 5块,一旦完成5 * 5块行,它将进入下一个5 * 5块行。

我试过但冷却不知道如何以方块方式填充它。

1 个答案:

答案 0 :(得分:1)

可能是

t1 <- data.frame(Class1=c(6,4,2, 7), Class2= c(19, 21, 23, 18))
v1 <- c(t(t1))
v2 <- rep(rep(1:2, length(v1)/2), v1)
m1 <- matrix(0,10,10)
n <- 5L
i <- (row(m1) + n-1) %/% n       
j <- (col(m1) + n-1) %/% n       
b <- i + (j - 1L) * max(i) 

indx <- as.numeric(gl(length(v2), 25, length(v2)))
lst <- split(v2, indx)
lst2 <- lapply(lst, matrix, 5, 5, byrow=TRUE)


 for(i in unique(c(b))){
    m1[b==i] <- lst2[[i]]
 }

 m1
 #     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
 #[1,]    1    1    1    1    1    1    1    2    2     2
 #[2,]    1    2    2    2    2    2    2    2    2     2
 #[3,]    2    2    2    2    2    2    2    2    2     2
 #[4,]    2    2    2    2    2    2    2    2    2     2
 #[5,]    2    2    2    2    2    2    2    2    2     2
 #[6,]    1    1    1    1    2    1    1    1    1     1
 #[7,]    2    2    2    2    2    1    1    2    2     2
 #[8,]    2    2    2    2    2    2    2    2    2     2
 #[9,]    2    2    2    2    2    2    2    2    2     2
 #[10,]   2    2    2    2    2    2    2    2    2     2