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

R语言如何按规则去除dataframe中计算机测试记录的重复值

最简实现方案

直接用tidyverse的分组操作就能实现,不需要写冗长的逐行if/else判断,也没必要硬套unique()方法,代码逻辑非常简洁,且能完全覆盖你说的三类数据场景。

核心思路

按计算机标识Computer分组后,只需要做两步判断即可:

  • 所有Working?值为1的记录,无论对应设备是全正常还是混有异常记录,一律保留
  • 对于Working?值为0的记录,仅当对应设备所有测试结果全为0、且是该设备的第一条0记录时才保留,其余0记录全部删除

可直接运行的代码

library(tidyverse)

cleaned_result <- WorkingComputerDf %>%
  group_by(Computer) %>%
  mutate(
    # 标记当前设备是否存在正常工作的测试记录
    exist_normal = any(`Working?` == 1),
    # 给组内每条记录编行号
    row_id = row_number()
  ) %>%
  filter(
    `Working?` == 1 | 
    (!exist_normal & row_id == 1)
  ) %>%
  # 移除临时生成的辅助列
  select(-exist_normal, -row_id) %>%
  ungroup()

不同方案的适配性说明

  • 关于unique()方法:unique()仅支持整行去重,没法区分「混有0/1的设备要删除全部0记录」和「全0设备要保留1条0记录」的规则差异,硬用的话反而需要额外写大量分支判断,得不偿失。
  • 关于纯if/else条件判断:当然可以实现,但需要写循环逐设备遍历判断,代码冗余度高,后续如果调整清洗规则改起来很麻烦,远不如分组操作的逻辑直观。
  • 上述tidyverse方案可以自动适配你提到的三类场景:
    • 多次测试全为1的设备:所有记录的Working?都是1,会被全部保留
    • 同时存在0和1测试结果的设备:exist_normal标记为TRUE,所有Working?为0的记录会被自动过滤,仅保留正常记录
    • 多次测试全为0的设备:exist_normal标记为FALSE,仅保留第一条0记录,其余重复0记录会被删除

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:57:17