You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 08:08:44