r - R中的序列组合矩阵

标签 r combinations sequence rowsum

我想为 5 个变量创建一个矩阵,这样每个变量都从 seq(from = 0, to = 1, length.out = 500) 中获取一个值rowSums(数据)= 1

换句话说,我想知道如何创建一个矩阵来显示所有可能的数字组合以及每个 row = 1 的总和。

最佳答案

这是一个使用循环的迭代解决方案。给你所有可能的数字排列加起来为 1,它们之间的距离是 N 的倍数。这里的想法是将所有数字从 0 到 1(它们之间的距离是 N 的倍数),然后对于每个一个在新列中包含所有添加时不超过 1 的数字。冲洗并重复,除了在最后一次迭代中,在最后一次迭代中,您只添加完成该行的数字和该行的总和。

就像人们在评论中指出的那样,如果您想要 N = 1/499*,它会给您一个非常非常大的矩阵。我注意到,对于 N = 1/200,它已经花费了大约 2、3 分钟,因此对于 N = 1/499,它可能花费的时间太长了。

*seq(from = 0, to = 1, length.out = 500)seq(from = 0, to = 1, by = 1/499) 相同

N = 1/2
M = 5

x1 = seq(0, 1, by = N)

df = data.frame(x1)

for(i in 1:(M-2)){

  x_next = sapply(rowSums(df), function(x){seq(0, 1-x, by = N)})
  df = data.frame(sapply(df, rep, sapply(x_next,length)))
  df = cbind(df, unlist(x_next))

}

x_next = sapply(rowSums(df), function(x){1-x})
df = sapply(df, rep, sapply(x_next,length))
df = data.frame(df)
df = cbind(df, unlist(x_next))

> df
    x1 unlist.x_next. unlist.x_next..1 unlist.x_next..2 unlist(x_next)
1  0.0            0.0              0.0              0.0            1.0
2  0.0            0.0              0.0              0.5            0.5
3  0.0            0.0              0.0              1.0            0.0
4  0.0            0.0              0.5              0.0            0.5
5  0.0            0.0              0.5              0.5            0.0
6  0.0            0.0              1.0              0.0            0.0
7  0.0            0.5              0.0              0.0            0.5
8  0.0            0.5              0.0              0.5            0.0
9  0.0            0.5              0.5              0.0            0.0
10 0.0            1.0              0.0              0.0            0.0
11 0.5            0.0              0.0              0.0            0.5
12 0.5            0.0              0.0              0.5            0.0
13 0.5            0.0              0.5              0.0            0.0
14 0.5            0.5              0.0              0.0            0.0
15 1.0            0.0              0.0              0.0            0.0

关于r - R中的序列组合矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50822262/

相关文章:

r - 如何从 R 中的特定包中分离所有对象和方法?

php - 用 PHP 创建所有可能的组合

c# - 用 10 10 替换字节 10

Hibernate 4 - 未启用 getGenerateKeys() 支持

sql - postgresql -- Curval 不起作用,使用 PHP PDO

R DPLYR 按组计数值

r - 在 R 中匹配 '+' 时 pmatch 出现意外行为

r - Packrat bootstrap 找不到 Packrat 私有(private)库

r - 在 R 中生成非重复组合对

python - 如何在 python 中获取大小为 k 的列表的所有组合(其中 k > 列表的长度)?