R:获得最多100个的三个数字的所有组合

时间:2017-10-16 19:53:50

标签: r combinations

我有三个变量:X,Y和Z.我想找到X,Y和Z的所有组合,加起来为100. X,Y和Z只能取[0,100]之间的值。输出应该看起来像这样:

  X   Y   Z   Sum
100   0   0   100
 99   1   0   100
 99   0   1   100
 98   2   0   100
 98   1   1   100
 98   0   2   100

依旧......

有关如何获得所有可能组合的任何建议吗?

2 个答案:

答案 0 :(得分:4)

替代方案(对于大数字可能更有效)将是

df <- do.call(rbind, lapply(0:100, function(i) data.frame(x=i, y=0:(100-i))))
df$z <- 100-df$x-df$y

答案 1 :(得分:3)

由于您只在三列上限制为1:100,因此这很容易暴力破解。如果范围较大,则需要更聪明的解决方案。

library(data.table)

df <- expand.grid(X = 0:100,
                  Y = 0:100,
                  Z = 0:100)

setDT(df)

df[, Sum := X + Y + Z]
df[Sum == 100]
#         X Y   Z Sum
#    1: 100 0   0 100
#    2:  99 1   0 100
#    3:  98 2   0 100
#    4:  97 3   0 100
#    5:  96 4   0 100
#   ---              
# 5147:   1 1  98 100
# 5148:   0 2  98 100
# 5149:   1 0  99 100
# 5150:   0 1  99 100
# 5151:   0 0 100 100