如何基于R中的频率对列进行采样?

时间:2018-10-15 13:31:32

标签: r tidyverse

当前具有以下数据表

enter image description here

如您所见,发生1的概率为30%,发生2的概率为50%,发生3的概率为

我想根据该概率对该列中的值进行采样

所以我想要这样的东西

enter image description here

如您所见-前两列不受影响

有关如何执行此操作的任何想法-我认为示例函数会有所帮助,但不确定如何使它工作

2 个答案:

答案 0 :(得分:0)

最简单的方法就是重新整理列...

df$col3 <- sample(df$col3)

答案 1 :(得分:0)

如果您要重新创建具有所需概率的列,而不仅仅是改组其当前值:

df$col3sample <- sapply(1:nrow(df), function(x) sample(3, size=1, prob=c(0.3, 0.5, 0.2), replace=TRUE))

这将在df中创建新列,并以0.3 / 0.5 / 0.2的概率为每行分配1、2或3。

   col1   col2 col3 col3sample
1    ab    red    2          3
2    as   blue    1          1
3    ad  green    2          2
4    af orange    1          2
5    ag  black    2          2
6    ah    red    1          1
7    aw  green    2          2
8    we orange    3          3
9    wr  black    2          1
10   et  white    3          2

这的确允许概率分布中出现一些随机变化,因此,您可能必须进行一些采样才能使其恰好是30%1s,50%2s和20%3s。