首页 > 解决方案 > 根据条件和条件的概率从数据框中绘制 ID

问题描述

我有以下数据框

ID <- c(1,2,3,4,5,6)
pop <- c(10,10,10,10,1000,1000)
df <- data.frame(pop,ID)

现在我想从这个数据框中绘制唯一 ID,条件是,我绘制一个人口大于或等于 1000 的 ID 的概率为 0.1,以及绘制人口低于的 ID 的概率1000 为 0.9。

这是我想出的代码:

sample(c(df$ID[df$pop>=1000],df$ID[df$pop<1000]),3, prob=c(0.1,0.9))

但是,我收到以下错误消息:

Error in sample.int(length(x), size, replace, prob) : 
  incorrect number of probabilities

我怎样才能重写这个问题,使它在不为每个 ID 分配概率的情况下工作?

标签: rconditionalsamplesampling

解决方案


一种简单的方法是为每个 ID 创建一个概率向量并将其传递给sample函数。对于具有 pop>=1000概率向量0.1的 ID 应该具有 并且对于具有 pop<1000向量的 ID 应该包含0.9.

# Create a probability vector for each ID and pass it to sample function. 
sample(df$ID, 3, prob = ifelse(df$pop>=1000, 0.1, 0.9))
#[1] 4 3 2
sample(df$ID, 3, prob = ifelse(df$pop>=1000, 0.1, 0.9))
#[1] 2 1 4
sample(df$ID, 3, prob = ifelse(df$pop>=1000, 0.1, 0.9))
#[1] 3 2 4

数据:

ID <- c(1,2,3,4,5,6)
pop <- c(10,10,10,10,1000,1000)
df <- data.frame(pop,ID)

推荐阅读