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

在R语言中以行索引为键实现数据框的外连接

解决方案

要实现以行索引为键的外连接,有两种常用方法,同时可将合并后的缺失值替换为你期望的-:

方法1:直接通过merge函数的行索引参数合并

merge函数支持通过指定by.x=0和by.y=0来以两个数据框的行索引作为连接键,搭配all=TRUE实现外连接:

# 执行外连接
merged_df <- merge(df1, df2, by.x = 0, by.y = 0, all = TRUE)
# 将临时生成的行名列设为数据框行名,并删除该列
row.names(merged_df) <- merged_df$Row.names
merged_df <- merged_df[, -1]
# 将NA替换为"-"
merged_df[is.na(merged_df)] <- "-"

执行后得到的结果与你期望的一致:

01.2020 02.2020 03.2020 08.2020 04.2020 09.2020
11190       4       1       2       1       2       2
12345       3       3       1       1       2       3
11323       1       2       2       -       -       -
11324       -       -       -       1       2       2

方法2:先将行索引转为普通列再合并

先把两个数据框的行索引提取为新列(比如命名为ID),再基于该列执行外连接:

# 为df1和df2添加行索引列
df1$ID <- row.names(df1)
df2$ID <- row.names(df2)
# 执行外连接
merged_df <- merge(df1, df2, by = "ID", all = TRUE)
# 将ID列设为行名,并删除ID列
row.names(merged_df) <- merged_df$ID
merged_df <- merged_df[, !names(merged_df) %in% "ID"]
# 替换NA为"-"
merged_df[is.na(merged_df)] <- "-"

关于merge函数的by参数说明

你原代码中by = ""的写法是错误的,by参数需要指定具体的连接列名。如果要直接用行索引作为键,不能设置为空字符串,而是用by.x=0和by.y=0(0代表行索引),或者先将行索引转为列后指定对应的列名(如上述方法中的ID)。

内容的提问来源于stack exchange,提问作者Bella_18

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:35:34