【发布时间】:2017-11-11 06:00:02
【问题描述】:
我正在尝试制作固定行数的数据集来制作测试数据集 - 但是我正在写入一个需要每个列的已知键的目的地。在我的例子中,假设这些键分别是小写字母、大写字母和数字。
我需要创建一个函数,它只提供所需的行数,组合键,使组合的数量等于所需的数量。自然会有一些不可能的情况,比如质数大于最大键,值大于键数的乘积。
10 行的示例输出数据集可能如下所示:
data.frame(col1 = rep("a", 10),
col2 = rep(LETTERS[1:5], 2),
col3 = rep(1:2, 5))
col1 col2 col3
1 a A 1
2 a B 2
3 a C 1
4 a D 2
5 a E 1
6 a A 2
7 a B 1
8 a C 2
9 a D 1
10 a E 2
请注意,我必须手动指定键才能获得所需的行数。我该如何安排事情,以便 R 可以为我做这件事?
我已经考虑过的事情
-
optim- 我试图求解的方程实际上是x * y * z = n,其中所有的方程都必须是整数。optim似乎不支持该约束 -
expand.grid然后是子集 - 近 5 亿个组合,耗尽了我所有的记忆 - 不是一个选择。 -
lpSolve- 有整数选项,但似乎只支持线性方程。可以使用日志使其线性化,但我不能使用整数选项。 -
factorize从gmp获取因子 - 考虑过这一点,但我想不出一种将主要因子分配回密钥的方法。编辑:可能是装箱问题?
【问题讨论】:
-
有多少列?
-
在我的情况下,它通常是四个,但它会有所不同。我总是提前知道有多少个以及密钥是什么。解决问题中的示例足以让我弄清楚如何更广泛地应用它。
-
我仍在努力理解您所说的组合键以使组合的数量等于所需的数量是什么意思。我还没有全图...
-
考虑一个更小的例子。假设有两列,其中第一列的键集是小写字母,第二列是大写字母。要获得所有组合唯一的 10 行,以下任何一项都有效:(10 from col1, 1 from col2), (5, 2), (2, 5), (1, 10)。我不需要所有这些,只需要一个有效的组合。
-
我提供了一个我想要的示例输出,其中输入只是所需的行数。我现在已经指定了。
标签: r