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

bil*_*999 3 random r

我有100行的数据集和我有4个值的字符串(A,B,C,D)我想随机分配给行.但是,我想分配A30行,B20行,C10行和D40行.我该怎么做?

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

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

Tho*_*mas 11

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

df$values <- sample(values, nrow(df), FALSE, prob = c(.3,.2,.1.,.4))
Run Code Online (Sandbox Code Playgroud)

第二种选择可能是你想要的.它从数据帧中随机采样行(基本上是对行进行洗牌)并将其用作提取索引(内部[]),然后为该混洗行分配一个值为A,B,C,D的向量,rep以确保正确使用30,20每个值分别出现10次和40次.

df$values[sample(1:nrow(df), nrow(df), FALSE)] <- rep(values, c(30,20,10,40))
Run Code Online (Sandbox Code Playgroud)