首页 > 解决方案 > 随机化矩阵中的列名

问题描述

我正在尝试创建一个具有一组固定列值的矩阵,但在该固定值内,我想递增到一定数量。下面有更好的解释......(希望)

例如,我想要列标题 ODI.1.1、ODI.1.2、... ODI.1.30,然后转到 ODI.2.1、ODI.2.2...并重复 ODI.8.10。因此,每个 ODI 值中的第一个数字可以变为 8,语句中的第二个数字可以随机变为 1-30。

这是我现在拥有的代码。我知道这是不对的,因为我现在将列设置为 30,我只是想逐步分配 30 列 ODI.1.1、ODI1.2.、.... 值。

这就是我目前所拥有的,再次我希望能够达到 ODI.8.1 值,但我不确定如何从这里继续前进。我再次希望语句的第二个数字(ODI.1. 2)随机出现。我不太确定该怎么做......下面是我想要实现的示例。

    ODI.1.1 ODI.1.2 ...... ODI.1.10
    ODI.2.1 ODI.2.2 ...... ODI.2.18
    ODI.3.1 ODI.1.2 ...... ODI.3.28

以下是我现在拥有的代码。我可以为语句 ODI 中的第一个数字打印出 1-8 的 ODI 语句的随机列表。1 .1,但我无法根据语句中的第二个数字 ODI.1 创建有序随机列表。1

n = 35
ODI = "ODI"
firstValue = 1:8
secondValue = 1:20

x <- sort(paste(ODI, firstValue, secondValue, sep ="."), 
        decreasing = FALSE)
x

现在有了代码,我得到了这个结果....

 "ODI.1.1"  "ODI.1.17" "ODI.1.9"  "ODI.2.10" "ODI.2.18" "ODI.2.2"  "ODI.3.11"

第二个值不像 1.1、1.2、1.3 那样随机排序。

标签: rpaste

解决方案


我不知道这是否是您想要的,但我们可以创建这些列名的所有可能组合,然后您可以从中随机抽取给定数量。

wat=expand.grid(1:8,1:30)
wat=paste0("ODI.",wat[,"Var1",drop=T],".",wat[,"Var2",drop=T])
sample(wat,5)
[1] "ODI.5.18" "ODI.1.30" "ODI.3.20" "ODI.3.1"  "ODI.3.13"

推荐阅读