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

如何基于条件在R中删除重复行?优先tidyverse方案

解决方案(tidyverse 实现)

基于你提供的数据特性(含x=1的行是对应id的最后一行且唯一,无x=1的id全为x=0),可以用以下tidyverse代码实现需求:

library(tidyverse)

df <- data.frame(id = c("001", "001", "001", "002", "002", "003", "003"),
                 x = c(0, 0, 0, 0, 1, 0, 1))

df_cleaned <- df %>%
  group_by(id) %>%
  slice_max(x, n = 1, with_ties = FALSE) %>%
  ungroup()

print(df_cleaned)

代码解释

  • group_by(id):按id分组,对每个个体的数据单独处理
  • slice_max(x, n = 1, with_ties = FALSE):在每个组内选取x值最大的行(x仅为0或1,最大的就是1;若组内全是0,则任选一行0),with_ties = FALSE确保即使存在多个相同最大值(如全0组)也只保留一行
  • ungroup():取消分组,恢复为普通数据框结构

输出结果

运行代码后得到与期望一致的结果:

# A tibble: 3 × 2
  id        x
  <chr> <dbl>
1 001       0
2 002       1
3 003       1

另一种贴合数据特性的简化写法(利用x=1是对应组最后一行的特点):

df_cleaned <- df %>%
  group_by(id) %>%
  slice_tail(n = 1) %>%
  ungroup()

该写法直接取每个组的最后一行,因数据特性保证了含x=1的组最后一行就是1,全0组最后一行是0,同样能得到正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 03:20:05