R 具有权重因子的子集数据

R 具有权重因子的子集数据,r,subset,R,Subset,我试图对数据帧进行子集划分,并使用列值作为权重因子 例如,假设我们有这些数据 set.seed(123) Data <- data.frame(x1 = sample(c(0,1),100, replace = T), x2 = round(runif(100, min=0, max=100),0), Prob = round(runif(100),2)) head(Data) > head(Data) x1 x2 Prob 1 0 60 0.24 2 1 33 0.96

我试图对数据帧进行子集划分,并使用列值作为权重因子

例如,假设我们有这些数据

set.seed(123)
Data <- data.frame(x1 = sample(c(0,1),100, replace = T), x2 = round(runif(100, min=0, max=100),0), Prob = round(runif(100),2))
head(Data)

> head(Data)
  x1 x2 Prob
1  0 60 0.24
2  1 33 0.96
3  0 49 0.60
4  1 95 0.52
5  1 48 0.40
6  0 89 0.88
其中x1和x2是简单的占位符,Prob表示数据中的值无效或无法观察到的概率。根据数据,我想生成5个不同的子集。新的数据帧将包含数据中90%、80%、70%、60%和50%的行。换言之,我想删除10%、20%、30%、40%和50%的数据,并创建5个新子集

困难在于我想使用Prob字段作为权重因子。Prob值较高的行在新数据子集中出现的次数应较少

例如,当创建新数据子集时,概率为0.24的概率将有24%未被选择。Prob值为0.96时,将有96%的不存在和一个新的数据子集

理想情况下,我会从数据中选择一个随机子集来生成新的数据帧

如有任何建议,将不胜感激


提前谢谢

我不确定你到底想做什么。但是,我认为您需要使用rbinom函数

要模拟一个结果,可以使用以下代码:

simOne = sapply(1 - Data$Prob, rbinom, size = 1, n = 1)
head(simOne)
# [1] 1 0 1 0 1 0
1-是必要的,因为你可能会失败,但你需要成功。接下来在原始矩阵中使用simOne:

Data[simOne > 0, ]
head(Data[simOne > 0, ] )
#  x1 x2 Prob
#   0 60 0.24
#   0 49 0.60
#   1 48 0.40
#   1 91 0.36
#   1 61 0.29
#   1 41 0.17
根据你的问题,我不知道你下一步打算做什么。如果你澄清,我很乐意在下一步修改我的答案。如果要生成多个不同的样本,如果同时对所有样本进行采样,代码的运行速度会更快:

nSamples=10 同一纳入概率 simMany=sapply1-数据$Prob,rbinom,大小=1,n=nSamples


请注意,您可能需要根据您想如何使用tsimMany来转置它

您将需要使用以下内容:

new_data <- Data[sample(nrow(Data), N, prob = (1 - Data$Prob), replace = F),]

你们试过样品了吗?您可以指定一个概率向量。我不完全确定它是如何工作的,但我想你会想要这样的东西:new_data@goodtimeslim,这个问题很模糊,但我不认为OP想要使用示例。它的权重需要加起来等于1,但OP的问题加起来大于1。我认为使用rbinom会更好。样本的概率不需要和为一,它们只需要是真实的概率。我提供的代码将与他的数据一起运行;我不知道这是否是他想要的。在这里,我生成了像他这样的数据,有100个观测值,概率为0到1的序列,增量为.1。我像上面一样抽取了25个样本,然后对样本中的概率进行了柱状图分析:@goodtimeslim感谢您的快速回复。我一直在使用示例函数的prob参数,它实现了我的预期。谢谢作为答案发布。。。?