递归绑定数据帧

时间:2017-03-31 12:55:51

标签: r cbind

我需要数据帧,相同数量的列但不同的行数。我想将一个数据帧的列绑定到另一个数据帧的列,但是将其中一个绑定到所有其他数据帧,即,将一个数据帧的第一行绑定到第二个数据帧的所有其他行,依此类推。

我尝试使用for循环,但当然,对于大量行,需要很长时间。举个例子:

df1 <- data.frame(replicate(5,sample(0:1,5,rep=TRUE)))
df2 <- data.frame(replicate(5,sample(0:1,5,rep=TRUE)))

b1 <- data.frame()
for (i in 1:nrow(df1)) {
    for (k in 1:nrow(df2)) {
        b1 <- rbind(b1, cbind(df1[i,], df2[k,]))
    }
}

在这种情况下,b1是25行10列的数据帧。

我尝试使用do.call,但是我得到了一对一的映射,即在这种情况下是5行的数据帧(第一列到第一列,第二列到第二列,依此类推)。

关于如何改进这个的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果我理解正确的话,那就是:

ind_1 <- rep(seq_len(nrow(df1)), each = nrow(df2))
ind_2 <- rep(seq_len(nrow(df2)), nrow(df1))

cbind(df1[ind_1, ], df2[ind_2, ])