2017-03-09 72 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

你可以使用我答案的後半部分來獲得獨特的組合,然後使用相同的組合但不同的比例重新創建集合。 –