根据条件的条件和概率从数据框中绘制ID

时间:2018-05-20 08:39:15

标签: r conditional sample sampling

我有以下数据框

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分配概率的情况下重写此问题?

2 个答案:

答案 0 :(得分:0)

一种简单的方法是为每个ID创建一个概率向量,并将其传递给sample函数。对于具有弹出>=1000概率向量的ID应该具有0.1,对于具有弹出<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)

答案 1 :(得分:0)

也许这是你的解决方案:

# 1. Data set
df <- data.frame(
  id = c(1, 2, 3, 4, 5, 6),
  population = c(10, 10, 10, 10, 1000, 1000))

# 2. Set 'probability' by 'population'
df <- df %>% 
  mutate(probability = ifelse((population >= 1000), 0.1, 0.9))