首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从R中的向量创建“可用”回收箱

从R中的向量创建“可用”回收箱
EN

Stack Overflow用户
提问于 2019-10-02 17:53:25
回答 1查看 69关注 0票数 1

我有一个带整数的数字向量,它:

  1. 我想变成“垃圾桶”。
  2. 我希望这些回收箱被用作样品框架,然后我可以再次,均匀地取样。

到目前为止,我可以使用findInterval来完成这两项任务,但是我正在寻找一种使用cut来完成这一任务的方法。

让我们考虑一个带有整数的随机向量,它将在长度相同的2间隔中被拆分

代码语言:javascript
复制
df = sample(1:100,10)
df
[1] 81 11 38 95 45 14 10 61 96 88

使用findInterval,我可以得到回收箱和一种近似的取样方法:

代码语言:javascript
复制
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

使用cut,我得到了间隔:

代码语言:javascript
复制
breaks = seq(1,max(df+1),by=10)
cut(df,breaks,right=TRUE)
[1] (71,81] (1,11]  (31,41] <NA>    (41,51] (11,21] (1,11]  (51,61] <NA>    (81,91] Levels: (1,11] (11,21] (21,31] (31,41] (41,51] (51,61] (61,71] (71,81] (81,91]

但我不知道如何使用这些值作为采样间隔。

如果有其他的方法,我会有兴趣知道!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-02 19:28:56

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

因此,基本上您想要执行拉丁超立方体抽样,即在区间[0,100]中与10的每个桶进行分层均匀采样。

为此,更容易下载lhs包并使用randomLHS函数执行分层采样。

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

代码语言:javascript
复制
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的输出是分层的,但是列仍然没有排序。因此,当我们显示最终分层图时,我们会对它们进行排序。

代码语言:javascript
复制
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

NB:为了方便起见,我做了四舍五入,但如果您愿意将非整数绘图作为输出,则不需要调用round函数)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58206803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档