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

R语言删除数据框col1重复非整行记录 仅保留各分组首行

R按分组保留首行去重的解决方法

原代码错误原因

你写的df %>% group_by(col1) %>% filter(duplicated(col1) | n()!=1)逻辑完全不符合需求:

  • 分组后每个组内的col1值完全相同,duplicated(col1)会返回组内除第一行外的所有行结果为TRUE
  • 加上| n()!=1的条件,所有行都会被判定为符合过滤条件,相当于全量保留原数据,自然得不到预期结果。

正确实现方法

1. 最简tidyverse写法(推荐)

直接用distinct()函数,指定按col1去重,同时保留所有列的内容:

library(dplyr)
result <- df %>% 
  distinct(col1, .keep_all = TRUE)

参数.keep_all = TRUE会保留首次出现的匹配行的所有列值,输出结果完全匹配你的预期。

2. 分组取首行写法

如果你习惯用分组操作的逻辑,可以用slice()或者行号过滤实现:

# slice写法
result <- df %>%
  group_by(col1) %>%
  slice(1) %>%
  ungroup() # 不需要后续分组操作的话建议加该行去掉分组属性

# 行号过滤写法
result <- df %>%
  group_by(col1) %>%
  filter(row_number() == 1) %>%
  ungroup()

3. 基础R实现

不需要加载任何第三方包,直接用基础函数就能实现:

result <- df[!duplicated(df$col1), ]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:15:01