R中合并无共同列的DataFrame出现重复行,求正确实现方式
按行对齐合并R中无共同列的DataFrame
我尝试合并两个无共同列的DataFrame,使用merge(x=df1, y=df2, by=NULL)后得到了25行的笛卡尔积结果(包含大量重复行),不符合预期。需要得到按行对齐的5行5列合并结果。
示例代码:
df1 <- data.frame(A=c("A","B", "C", "D", "E"), B=c(7, 9, 8, 3, 2), C=c(3, 5, 2, 9, 9)) df2 <- data.frame(D=c(1, 3, 3, 4, 5), E=c(7, 7, 8, 3, 2)) # 错误的合并方式,得到笛卡尔积 df3<-merge(x=df1, y=df2, by=NULL)
当前输出(部分):
A B C D E 1 A 7 3 1 7 2 B 9 5 1 7 3 C 8 2 1 7 4 D 3 9 1 7 5 E 2 9 1 7 6 A 7 3 3 7 7 B 9 5 3 7 8 C 8 2 3 7
期望输出:
A B C D E 1 A 7 3 1 7 2 B 9 5 3 7 3 C 8 2 3 8 4 D 3 9 4 3 5 E 2 9 5 2
方法1:直接使用cbind()
当两个DataFrame行数完全相同时,cbind()会直接按行对齐合并列,这是最直接高效的方式:
df3 <- cbind(df1, df2)
方法2:添加行号列后使用merge()
如果一定要用merge()函数,可以先给两个DataFrame添加相同的行号列,按行号合并后再删除该列:
# 给两个DataFrame添加行号列 df1$row_id <- 1:nrow(df1) df2$row_id <- 1:nrow(df2) # 按行号合并 df3 <- merge(df1, df2, by = "row_id") # 删除临时行号列 df3$row_id <- NULL
两种方法都能得到你期望的按行对齐的5行合并结果。
内容的提问来源于stack exchange,提问作者thole
相关产品推荐
相关产品推荐

