按预先指定的频率创建表格

时间:2017-03-09 15:55:47

标签: r matrix combinatorics

我有大型R矩阵,包含1,000行和4个属性,每个属性有4个级别,以便:

  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)

我知道这是一个基本的问题,但是我已经两个小时没脑子了,并且在Stack Overflow和互联网上找不到任何东西。

更新

我想在行中保留相同的组合。所以我想创建一个新的表,其中包含给定的比例但使用表格,因此我已经拥有了这些组合。

1 个答案:

答案 0 :(得分:-1)

您可以使用您想要的比例创建您的设置然后&#34;重新洗牌&#34;。

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))