用其他随机数替换随机生成的矩阵中的值

时间:2019-01-26 02:00:05

标签: r

我正在处理一个矩阵,需要用新随机生成的数字替换编码为1的值

起点是这样的矩阵

set.seed(38921)
p <- matrix(nrow = 10, ncol = 25)
for(i in 1:10){
  p[i, seq(1, floor(runif(1, min = 1, max = 25)), 1)] = 1
}

在生成的p矩阵中,我需要在每一行上将1的值替换为1到25之间的随机生成的整数,其中数字不能重复。

例如,在矩阵的第一行上,应该有6个在1和25之间随机绘制的数字(其中没有重复的数字)和19个NA列。在第二行中,应该有12个随机抽取的数字(介于1和25之间,没有重复)和13个NA列。

非常感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

您可以简单地将矩阵乘以另一个随机数矩阵。 NA将保持为NA。

p*matrix(sample(1:25), 10, 25)

或者如果尺寸更改:

p*matrix(sample(1:25), nrow(p), ncol(p))

答案 1 :(得分:0)

您在哪里:

p[i, seq(1, floor(runif(1, min = 1, max = 25)), 1)] = 1

您正在分配输入范围。因此,除了分配1之外,您还需要分配具有所需元素的适当大小的向量。可以通过以下方式生成:sample(1:25, desiredLength, replace=F)

set.seed(38921)
p <- matrix(nrow = 10, ncol = 25)
for(i in 1:10){
  n = floor(runif(1, min = 1, max = 25))
  p[i, seq(1, n, 1)] = sample(1:25, n, replace=F)
}

答案 2 :(得分:0)

假设您已经创建了初始矩阵,这是一种实现方法。

apply(t(p), 1, function(x) ifelse(x == 1, sample(1:25, sum(x[x == 1], na.rm = T), replace = F)))