r - 根据条件和条件的概率从数据框中绘制 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 分配概率的情况下工作?
解决方案
一种简单的方法是为每个 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)
推荐阅读
- php - 处理大型请求时 PHP 失败
- python - 图像到点坐标列表,满足特定条件
- docker - Docker 和 localhost 似乎没有按应有的方式连接
- java - 在android中如何将我的setter值转换为字符串?
- scala - Spark Graphx 中的图形数组
- c# - 在另一个项目中获取当前的 asp.net core 用户 ID
- node.js - 在没有前端的nodejs中发布请求
- python - 如何使切片列表@property在python中调用它的setter
- python - 从 pandas DatetimeIndex 中删除天数
- sql - DecryptByPassPhrase 返回 null