将R中的2个列表组合到data.table(并重复所有值)

时间:2014-08-21 00:25:37

标签: arrays r dataframe data.table

我在R中有2个数组。我想将它们组合成data.table(或data.frame),以便为数组1中的每个值与数组2中的每个值组合创建一行。

例如,如果我有:

Array1 <- c("A", "B", "C")
Array2 <- c(1, 2, 3)

我希望输出data.frame看起来像:

> DF
  Array1 Array2
1      A      1
2      A      2
3      A      3
4      B      1
5      B      2
6      B      3
7      C      1
8      C      2
9      C      3

有谁知道怎么做?

2 个答案:

答案 0 :(得分:2)

data.table有一个函数CJ,它与expand.grid非常相似,并生成一个键控data.table(这可能非常有用高级data.table加入):

CJ(a = Array1, b = Array2)
#   a b
#1: A 1
#2: A 2
#3: A 3
#4: B 1
#5: B 2
#6: B 3
#7: C 1
#8: C 2
#9: C 3

key(CJ(a = Array1, b = Array2))
#[1] "a" "b"

答案 1 :(得分:1)

显而易见的选择:

expand.grid(Array1,Array2)

如果您需要变量名称:

expand.grid(Array1=Array1,Array2=Array2)

结果:

#  Array1 Array2
#1      A      1
#2      B      1
#3      C      1
#4      A      2
#5      B      2
#6      C      2
#7      A      3
#8      B      3
#9      C      3

如果您特别需要data.table输出,正如@mnel建议您可以这样做:

out <- setDT(expand.grid(Array1=Array1,Array2=Array2))