我在下面给出了一个数组:
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块行。
我试过但冷却不知道如何以方块方式填充它。
答案 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