我有大型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和互联网上找不到任何东西。
更新
我想在行中保留相同的组合。所以我想创建一个新的表,其中包含给定的比例但使用表格,因此我已经拥有了这些组合。
答案 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))