提取某些级别比其他级别更高

时间:2018-02-04 19:15:43

标签: r random sampling

我正在尝试模拟某个地点的野生动物样本。我已经制作了一个物种清单,其中包含可以在该地点找到的所有物种及其相关的稀有物。

df <- data.frame(rarity = rep(c('common', 'uncommon', 'rare'), each = 2),
                 species = letters[1:6])
print(df)
    rarity species
1   common       a
2   common       b
3 uncommon       c
4 uncommon       d
5     rare       e
6     rare       f

然后我根据df的行的随机抽样创建另一个数据集。

df.sampled <- df[sample(1:nrow(df), 30, T),]

麻烦的是,这是不现实的;你不会像rare物种那样频繁地遇到uncommon物种。例如,遇到的10只动物中有6只应该是common,10只动物中有3只应该是common,10只动物中有1只应该是uncommon。在这里,我们以相同的频率获得所有三种稀有物:

rare

有没有一种方法可以比其他人更经常地对特定行进行采样?我有一种感觉df.matrix <- matrix(NA, ncol = 3, nrow = 1000) for(i in 1:1000){ df.sampled <- df[sample(1:6, 30, T),] df.matrix[i,] <- c(table(df.sampled$rarity)) } apply(df.matrix, 2, mean) 应该被使用,但我可能是错的......

1 个答案:

答案 0 :(得分:3)

以下是您的行编辑使用prob参数,示例值为0.6为普通值,0.3为罕见值,0.1为罕见值:

prob_vec <- c(0.6, 0.6, 0.3, 0.3, 0.1, 0.1)
df.sampled <- df[sample(1:nrow(df), 30, T, prob = prob_vec),]

df.sampled现在分布更加不均匀。