我正在尝试模拟某个地点的野生动物样本。我已经制作了一个物种清单,其中包含可以在该地点找到的所有物种及其相关的稀有物。
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)
应该被使用,但我可能是错的......
答案 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现在分布更加不均匀。