递归绑定数据帧
Bind data frames recursively
我需要数据框,列数相同但行数不同。我想将一个数据框的列绑定到另一个数据框的列,但将一个数据框的列绑定到所有其他数据框,即将一个数据框的第一行绑定到第二个数据框的所有其他行,依此类推。
我试过用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 行的数据框(第一列到第一列,第二列到第二列,以及依此类推)。
有什么改进方法吗?
谢谢!
如果我对你的理解正确,这与:
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, ])
我需要数据框,列数相同但行数不同。我想将一个数据框的列绑定到另一个数据框的列,但将一个数据框的列绑定到所有其他数据框,即将一个数据框的第一行绑定到第二个数据框的所有其他行,依此类推。
我试过用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 行的数据框(第一列到第一列,第二列到第二列,以及依此类推)。
有什么改进方法吗?
谢谢!
如果我对你的理解正确,这与:
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, ])