我的问题如下,我考虑了许多推导:
我有一个数组,比如尺寸为dims = c(10000,5,2) - 即10行,5列和2个子数组。
我希望能够使用sample()函数对EACH子阵列中给定比例(比如m)的行进行采样,并将它们移动到BETWEEN子阵列中。
因此,请说使用子阵列2的第10行交换第5行子阵列1(参见下面的示例)。
我问了一个类似的问题
得到了一些很好的帮助。
该解决方案很有用,但仅限于行的随机采样(意味着不会对所有子阵列进行采样)。
, , 1
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 4 3 4 4 3 4 5 2 4 4
[2,] 1 4 3 5 4 5 4 5 2 4
[3,] 1 5 2 1 1 2 1 4 5 1
[4,] 3 1 1 3 5 4 2 4 4 4
[5,] 3 2 5 1 2 2 5 5 4 3 <-- e.g., switch this row
[6,] 4 5 5 2 3 4 1 3 5 5
[7,] 5 5 5 5 1 4 3 1 2 5
[8,] 3 4 3 1 3 3 4 3 2 3
[9,] 1 1 3 2 4 4 1 4 2 3
[10,] 1 4 4 2 4 2 4 2 2 1
, , 2
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 5 5 1 1 5 2 1 4 3 1
[2,] 4 3 2 4 3 5 5 5 4 3
[3,] 2 4 1 1 4 2 2 2 3 4
[4,] 5 1 4 5 4 4 3 4 4 5
[5,] 1 5 5 4 3 3 5 2 2 2
[6,] 2 2 2 2 5 5 3 4 3 5
[7,] 5 2 1 1 2 5 3 4 4 2
[8,] 3 4 3 3 1 3 3 2 3 5
[9,] 2 1 4 4 3 2 4 5 5 2
[10,] 5 3 4 5 4 3 5 1 2 3 <-- with this row
在上面的例子中,m = 0.10,即每个子阵列中10%的行(1行)被采样然后交换。
有关如何强制sample()在所有子阵列中采样的任何想法?理想情况下,每个子数组中的行数将非常大(10000或更多)。
虽然我只包含了2个子数组,其中一个或多个随机行在子数组2中用随机行交换(由m表示),我需要一个可以推广到k个子数组的例程。因此,如果k = 3,则在所有子阵列中进行采样,并且随机行与相邻子阵列交换。
因此,子阵列1中的一个或多个随机行具有相同的移动到子阵列2或子阵列3的可能性(只要它们总是在子阵列之间移动,它们与哪个子阵列行没有关系。然后,子阵列2或3中相应的一行或多行将转到子阵列1。
行数必须保持不变。例如,子阵列1中不能有11行,而子阵列2中只有9行 - 它必须是10和10。
我不知道任何可以执行此操作的软件包。这里的目标是模拟动物的运动。
非常感谢任何想法。
答案 0 :(得分:0)
这是冗长的,可以清理,但应该让你到那里。
set.seed(4)
x <- array(sample(1:10, 200, replace = T), dim = c(10, 10, 2))
nrows_x <- dim(x)[1]
proportion <- 0.10
idx <- sample(1:nrows_x, nrows_x * proportion)
rows_dim_1 <- x[idx, , 1]
rows_dim_2 <- x[idx, , 2]
x[idx, , 1] <- rows_dim_2
x[idx, , 2] <- rows_dim_1