我正在处理一个矩阵,需要用新随机生成的数字替换编码为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列。
非常感谢您的帮助。
答案 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)))