2017-03-09 55 views
0

我有1000行和4个属性和4个级别大R矩阵创建表中的每个属性,使得:通过预先指定的频率

Row A B C D 
    1  1 3 4 2 
    2  2 1 3 4 
    3  1 2 4 3 
    ... ... 
    1000 3 4 1 2 

我想创建由预先指定的比例使得一个新的表属性A的第1级出现25%的时间,第2级50%,第3级10%和第4级15%的时间。该表可以具有比1,000行更小的尺寸,并且行必须是唯一的。

proportions <- c(0.25,0.5,0.1,0.15) 

我知道这是怎样的一个基本问题,但我已经打破我的头两个小时,并没有发现对堆栈溢出,也没有任何互联网。

UPDATE

我想保持行内的相同组合。所以我想用给定的比例创建一个新的表格,但是使用表格,因此我已经有了这些组合。

回答

-1

你可以用你想要的比例来创建你的设置然后“重新洗牌”。

A <- c(rep(1,250), rep(2,500), rep(3,100), rep(4,150)) 
B <- sample(A, 1000) 

编辑: 它不是完全楔子OP想要什么。

如果你想完全相同的表随机你可以尝试

df_new <- df[sample(1:nrow(df), nrow(df)),] 

让你仅限于一些观察完全相同的比例,以使所有新计数整除老计数 在为了得到每个独特的行的比例,你可以尝试:

# simulating the table 
a <- c(rep(1,250), rep(2,500), rep(3,100), rep(4,150)) 
b <- sample(a, 4000, replace = T) 

df <- as.data.frame(matrix(b, ncol = 4)) 

names(df) <- c('a','b','c','d') 

# getting the proportions 
z <- aggregate(row.names(df), list(df$a, df$b, df$c, df$d), function(x) freq = length(x)) 
+0

我需要我已经有的相同的确切组合。所以从表中创建它们,我保留了列之间的组合,我不需要从头开始创建一个新表。 – adrian1121

+0

关键是,目前属性中的比例平衡,因此它们都具有相同的比例,我希望它们不平衡但保持相同的组合。 – adrian1121

+0

你可以使用我答案的后半部分来获得独特的组合,然后使用相同的组合但不同的比例重新创建集合。 –