我有一个包含100行的数据集,我有一个包含4个值的字符串(A
,B
,C
,D
)我想随机分配给行。但是,我想将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
等等,但我想有一个更好的方法来做这个比这个
答案 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