使用数字随机分配而无需替换

时间:2014-11-08 16:56:47

标签: r random

我有一个包含100行的数据集,我有一个包含4个值的字符串(ABCD)我想随机分配给行。但是,我想将A分配给30行,B分配给20行,C分配给10行,D分配给40行。我该怎么做呢?

df <- data.frame(ID=c(1:100))
values <- c("A", "B", "C", "D")

我想到的一种方法是生成一个随机排序的数字列表1-100并分配前10个A等等,但我想有一个更好的方法来做这个比这个

1 个答案:

答案 0 :(得分:9)

以下是两个选项。第一个概率性地将值分配给df中的列。这并不能保证A,B,C,D各自分别为30,20,10和40。相反,期望会有。

df$values <- sample(values, nrow(df), FALSE, prob = c(.3,.2,.1.,.4))

这第二个选项可能是你想要的。它从数据帧中随机抽样行(基本上是对行进行混洗),并将它们用作提取索引(在[]内),然后为该混洗行分配一个使用{创建的值A,B,C,D的向量{1}}确保每个值分别确实有30,20,10和40次出现。

rep