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

如何在不增加行数的情况下合并多个同维度R数据框?

解决多DataFrame按非NA值合并的问题

行数增加的原因

你遇到的行数膨胀问题,核心是**join类函数不匹配你的需求场景**:这类函数是按匹配键合并行,若原始数据中ID+Coordinates的组合存在隐性重复(哪怕你以为没有),就会触发笛卡尔积匹配导致行数翻倍。而你的需求是填充同位置的非NA值,属于列维度的合并,而非行维度的匹配。

最优解决方案

由于所有DataFrame的行列结构完全一致,仅部分列有非NA值,以下两种方法可以高效实现需求:

方法一:批量合并后提取非NA值(适合多DataFrame场景)

将所有DataFrame放入列表,合并后按分组提取每个变量的第一个非NA值:

library(dplyr)

# 统一存放所有DataFrame
df_collection <- list(DF1, DF2, DF3)

# 合并并提取有效数据
DF4 <- bind_rows(df_collection) %>%
  group_by(ID, Coordinates) %>%
  summarize(
    across(c(Var1, Var2, Var3), ~first(na.omit(.x))),
    .groups = "drop"
  )

方法二:逐列合并非NA值(简洁高效)

用coalesce函数直接对每一列的多个DataFrame取值,优先取非NA值:

library(dplyr)

DF4 <- tibble(
  ID = DF1$ID,
  Coordinates = DF1$Coordinates,
  Var1 = coalesce(DF1$Var1, DF2$Var1, DF3$Var1),
  Var2 = coalesce(DF1$Var2, DF2$Var2, DF3$Var2),
  Var3 = coalesce(DF1$Var3, DF2$Var3, DF3$Var3)
)

验证结果

两种方法最终得到的DF4均为:

ID Coordinates Var1 Var2 Var3
1  A         100 <NA>    0 <NA>
2  B         200   20 <NA>   30
3  C         300 <NA>   20 <NA>
4  D         400 <NA> <NA> <NA>
5  E         500    9    0   50

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 16:47:48