我有三个变量: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
依旧......
有关如何获得所有可能组合的任何建议吗?
答案 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