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

使用tidyverse按name1、name2同时相同条件合并R数据框多行

实现代码

library(tidyverse)

# 构建示例数据
df <- data.frame(value = c(2,2,2,2,1,1,1,1,1,1),
                 name1 = c("a", "a", "b", "b", 'c', "d", "e", NA, NA, NA),
                 name2 = c("x", "x", "x", "x", "x", "x", "y", NA, NA, NA))

# 按规则合并行
res <- bind_rows(
  # 非空组合去重
  df %>% filter(!is.na(name1) | !is.na(name2)) %>% 
    distinct(name1, name2, .keep_all = TRUE),
  # 保留全部全空行
  df %>% filter(is.na(name1) & is.na(name2))
)

逻辑说明

dplyr的distinct函数默认会将NA判定为相等值,如果直接对全量数据按name1、name2去重,所有name1和name2均为NA的行只会保留1条,不符合预期。因此拆分两类行分别处理:

  • 对name1或name2不为NA的行,按两个字段的组合去重,.keep_all = TRUE参数用来保留value列的取值
  • 直接保留所有name1和name2同时为NA的行
  • 最后拼接两类行即可得到你需要的输出结果

执行代码后输出的res和你提供的预期结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:54:01