如何用R语言无放回抽样生成70行4列的指定元素矩阵?
解决无放回抽样生成70行4列矩阵的问题
你之前的代码问题在于一次性全局无放回抽取了70*4=280个元素,但我们只有4个唯一值,显然会提前耗尽元素,而且根本没法保证每行都是4个不同的元素。下面给你两种简单的解决方案:
方法一:直观的for循环
这种方式逻辑清晰,容易理解,适合刚接触R的朋友:
# 先初始化一个70行4列的空矩阵 result_matrix <- matrix(nrow = 70, ncol = 4) # 循环70次,每次单独生成一行无放回抽样结果 for (i in 1:70) { result_matrix[i, ] <- sample(c("MU", "MG", "PU", "PG"), size = 4, replace = FALSE) }
每次循环都从完整的4个元素里做无放回抽样,所以每行必然是4个不重复的元素,70次抽样相互独立。
方法二:更简洁的replicate函数
R里专门有处理重复任务的函数replicate(),用它可以一行搞定,更符合R的惯用写法:
# 重复70次抽样,转置后得到70行4列的矩阵 result_matrix <- t(replicate(70, sample(c("MU", "MG", "PU", "PG"), 4, replace = FALSE)))
replicate(70, ...)会执行70次抽样操作,每次返回一个长度为4的向量,默认会把这些向量组合成4行70列的矩阵,最后用t()转置成我们需要的70行4列结构。
验证结果
你可以用head()查看前几行,确认每行都是4个不重复的元素:
head(result_matrix)
输出示例:
[,1] [,2] [,3] [,4] [1,] "MG" "PU" "MU" "PG" [2,] "PU" "MG" "PG" "MU" [3,] "MU" "PG" "MG" "PU" [4,] "PG" "MU" "PU" "MG" [5,] "MG" "MU" "PG" "PU" [6,] "PU" "MU" "MG" "PG"
内容的提问来源于stack exchange,提问作者HCAI
相关产品推荐
相关产品推荐

