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

R语言按suitcases分组筛选objects列恰好出现2次的重复行

问题原因

你原来的代码存在3个核心问题,完全不匹配需求:

  • 没有按suitcases字段分组,忽略了objects编号按行李箱重置的规则,会跨行李箱错误统计重复值
  • add_count(!sym(var))的写法会把除objects外的所有列(包括time.min、status这些无关字段)都作为重复判断的匹配维度,只要这些字段有差异就不会被判定为重复,完全不符合你仅匹配columns、rows的要求
  • 编写的for循环既没有正确遍历suitcases的唯一取值,也没有存储每次循环的输出结果,运行后不会得到有效结果
解决方案

不需要写自定义函数+循环,直接用tidyverse的分组计数逻辑一步完成即可,核心判断规则是:在同一个suitcases分组下,columns、rows、objects三个字段值完全相同的行,出现次数恰好为2次就保留,出现1次或3次及以上都剔除。
完整代码如下:

library(tidyverse)

# 处理你的Data表,直接运行即可得到结果
result <- Data |> 
  # 按规则要求的维度分组:同行李箱、同行列位置、同object编号
  group_by(suitcases, columns, rows, objects) |> 
  # 统计每个分组的行数
  add_count() |> 
  # 仅保留出现恰好2次的分组
  filter(n == 2) |> 
  # 移除辅助计数的n列
  select(-n) |> 
  # 取消分组
  ungroup()
示例数据验证

用你提供的示例结构数据运行上述代码,得到的结果完全符合预期:

  • 保留suitcases=3, rows=6, columns=3, objects=6对应的2行
  • 保留suitcases=10, rows=6, columns=3, objects=4对应的2行
    其余行要么同分组下仅出现1次,要么匹配维度不一致,都会被剔除。

注意:如果你后续需要调整匹配规则,只需要修改group_by()里的字段即可,比如要增加其他匹配字段直接往括号里加就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:09:26