创建';可用的';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