我有以下数据框
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分配概率的情况下重写此问题?
答案 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))