[问题] sample中一个每个都抽到

楼主: jas9441314 (jet B)   2017-06-23 00:48:28
[问题类型]:
程式咨询(我想用R 做某件事情,但是我不知道要怎么用R 写出来)
[软件熟悉度]:
请把以下不需要的部份删除
入门(写过其他程式,只是对语法不熟悉)
*[m
[问题叙述]:
我想要从1:368个数字当中 根据每个数字出现的机率p=c(p1,p2,...,p368)抽取1次放回
希望1:368每个数字都能被抽中
然后重复抽10次这样的动作
但是目前抽出来有些情况只会抽出367个数字而非368个
想请问各位大大如何解决 感谢
[程式范例]:
replicate(10,saple(1:368,nrow(data),replace=TRUE,prob=p))
[环境叙述]:
请提供 sessionInfo() 的输出结果,
里面含有所有你使用的作业系统、R 的版本和套件版本资讯,
让版友更容易找出错误
[关键字]:
选择性,也许未来有用
作者: andrew43 (讨厌有好心推文后删文者)   2017-06-23 01:20:00
不懂“希望1:368每个数字都能被抽中”是怎么回事?不是已经给定机率抽出放回,又怎么保证都能被抽中?
作者: inin007 (inin)   2017-06-23 01:58:00
这问题叙述,中文能力要加油
楼主: jas9441314 (jet B)   2017-06-23 09:16:00
就是给定抽后放回 但想每个都抽到
作者: f496328mm (为什么会流泪)   2017-06-23 10:49:00
你要放回,又要全部都抽到,不可能,你不要放回才能全部抽到
作者: cywhale (cywhale)   2017-06-23 10:50:00
是说每次抽个1000数字(比如)里面包含1-368,重复10次??
作者: f496328mm (为什么会流泪)   2017-06-23 10:52:00
例如1:2你抽两次,抽后放回,那有可能出现两次都抽到 1or 2,数字多那就更容易重复抽到相同的如果你其中一个机率p,小于nrow(data),那抽不到是正常的调整seed有可能全部都抽到,不过这样不太好就是了
作者: a78998042a (Benjimine)   2017-06-23 11:44:00
sample.base.v = 1:368s_len.v = length(sample.base.v)sample.f = function()sample(c(sample(sample.base.v),sample(sample.base.v,(nrow(data) - s_len.v),replace=TRUE,prob=rep(1/s_len.v, s_len.v))))sample.result.m = replicate(10, sample.f())既然一定要抽到,就不是纯随机的问题,那就先放一个1:368的base,接着再随机抽凑满nrow(data)个数,最后再打乱顺序。
作者: f496328mm (为什么会流泪)   2017-06-23 13:09:00
楼上这样的base,可是他有机率问题耶,他是有给定机率的
作者: a78998042a (Benjimine)   2017-06-23 15:01:00
发文者说明,抽样条件为 抽出每组样本 内 base中所有元素 均 至少大于1个。所以当设定base中任意元素之出现机率<1时,抽样条件就不可能满足。
楼主: jas9441314 (jet B)   2017-06-23 15:39:00
好的 感谢各位大大 我用其他方式绕过去处理看看
作者: lin15 ( )   2017-06-23 22:49:00
原po国文要加强...

Links booklink

Contact Us: admin [ a t ] ucptt.com