2014-11-08 63 views
3

我有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等等,但我想會有一個更好的方法來做到這一點比這。

回答

8

這裏有兩個選項。第一個概率地將值分配給df中的一列。這並不能保證每個A,B,C,D分別有30,20,10和40個。相反,預計會有。

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

第二個選項可能是想要的。它從數據幀中隨機抽樣行(基本上是對行進行混洗),並將這些行用作抽取索引(在[]之內),然後將使用rep創建的值A,B,C,D創建的向量分配給該組混合行, ,每個值分別有20次,10次和40次出現。

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