创建';可用的';R中向量的存储箱

创建';可用的';R中向量的存储箱,r,random,R,Random,我有一个带整数的数值向量: 我想变成“垃圾箱” 我希望这些箱子被用作样品架,然后我可以从中再次均匀取样 到目前为止,我可以使用findInterval实现这两种功能,但我正在寻找一种使用cut实现这两种功能的方法 让我们考虑一个具有整数的随机向量,它将以相等的长度间隔分裂 2 < /代码>: df = sample(1:100,10) df [1] 81 11 38 95 45 14 10 61 96 88 使用findInterval我得到了箱子和取样的近似方法: breaks = seq(

我有一个带整数的数值向量:

  • 我想变成“垃圾箱”
  • 我希望这些箱子被用作样品架,然后我可以从中再次均匀取样
  • 到目前为止,我可以使用
    findInterval
    实现这两种功能,但我正在寻找一种使用
    cut
    实现这两种功能的方法

    让我们考虑一个具有整数的随机向量,它将以相等的长度间隔分裂<代码> 2 < /代码>:

    df = sample(1:100,10)
    df
    [1] 81 11 38 95 45 14 10 61 96 88
    
    使用
    findInterval
    我得到了箱子和取样的近似方法:

    breaks = seq(1,max(df+1),by=10)
    b <- findInterval(df, breaks)
    b
    [1]  9  2  4 10  5  2  1  7 10  9
    # If b is equal to 1 or 100, then use ifelse() to prevent leaking outside [1,100]
    sam <- round(runif(10,ifelse(b==1,10*b-9,10*b-10),ifelse(b==10,10*b,10*b+10))) 
    sam
    [1] 85 14 39 94 50 16  7 63 93 85
    
    但我不知道如何使用这些值作为采样间隔


    如果有其他方法,我很想知道

    好问题!我会给你一个完全不同的方法

    因此,基本上您希望执行采样,即在间隔
    [0100]
    内分层均匀采样,每个箱子
    10

    为此,下载
    lhs
    软件包并使用
    randomLHS
    函数执行分层抽样会更容易

    第一步:根据需要,每10个四分位数(地层)生成统一的绘图。在本例中,让我们做5次:

    library(lhs)
    randomLHS(10, 5)
    
    > X
                [,1]       [,2]       [,3]       [,4]       [,5]
     [1,] 0.92154144 0.22185959 0.49953326 0.66248165 0.79035832
     [2,] 0.47571700 0.05894016 0.55883326 0.34875162 0.98831829
     [3,] 0.57738486 0.64525528 0.04955733 0.50939147 0.46297294
     [4,] 0.17578838 0.83843074 0.27138703 0.87421301 0.16401042
     [5,] 0.03850768 0.40746004 0.69518073 0.23487653 0.55537945
     [6,] 0.83942905 0.52957416 0.84952231 0.14031915 0.84956654
     [7,] 0.22802502 0.79911728 0.76789194 0.09788194 0.08667802
     [8,] 0.61821268 0.93088726 0.30789950 0.95831993 0.36903120
     [9,] 0.70391230 0.11445154 0.97976851 0.42027836 0.61097786
    [10,] 0.31385709 0.33557430 0.18389684 0.70124986 0.27601550
    
    第二步:虽然
    X
    的输出是分层的,但列仍然未排序。因此,当我们显示最终的分层绘图时,我们会对它们进行排序

    Y <- apply(X,2, function(x) sort(round(x*100)))
    > Y
          [,1] [,2] [,3] [,4] [,5]
     [1,]    4    6    5   10    9
     [2,]   18   11   18   14   16
     [3,]   23   22   27   23   28
     [4,]   31   34   31   35   37
     [5,]   48   41   50   42   46
     [6,]   58   53   56   51   56
     [7,]   62   65   70   66   61
     [8,]   70   80   77   70   79
     [9,]   84   84   85   87   85
    [10,]   92   93   98   96   99
    
    Y
    [,1] [,2] [,3] [,4] [,5]
    [1,]    4    6    5   10    9
    [2,]   18   11   18   14   16
    [3,]   23   22   27   23   28
    [4,]   31   34   31   35   37
    [5,]   48   41   50   42   46
    [6,]   58   53   56   51   56
    [7,]   62   65   70   66   61
    [8,]   70   80   77   70   79
    [9,]   84   84   85   87   85
    [10,]   92   93   98   96   99
    

    NB:我进行舍入只是为了方便起见,但如果您愿意将非整数绘图作为输出,则无需调用
    round
    函数。

    您在
    findInterval
    中的
    中断是什么?哇,很抱歉!最初我将这两个代码片段放在了另一个位置<代码>中断
    在这两种情况下都是相同的向量。我现在作出修正!是的,我已经意识到了!请检查我的答案…如果这是一个
    好问题,则您可以向上投票。这就是问题的关键所在,所以好的问题很突出。
    
    Y <- apply(X,2, function(x) sort(round(x*100)))
    > Y
          [,1] [,2] [,3] [,4] [,5]
     [1,]    4    6    5   10    9
     [2,]   18   11   18   14   16
     [3,]   23   22   27   23   28
     [4,]   31   34   31   35   37
     [5,]   48   41   50   42   46
     [6,]   58   53   56   51   56
     [7,]   62   65   70   66   61
     [8,]   70   80   77   70   79
     [9,]   84   84   85   87   85
    [10,]   92   93   98   96   99