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

在R语言中检测昆虫左右翅文件是否成对存在

检测昆虫翅文件条目是否成对的解决方案

核心思路

通过提取每个翅文件的唯一标识前缀(去除末尾的-L.dw.png或-R.dw.png后缀),统计前缀的出现次数,次数不为2的即为未成对条目;也可按奇偶行的配对规则直接检查相邻行的前缀一致性。


方法一:全局统计前缀出现次数

适用于不依赖行顺序的场景,能检测所有缺漏、重复的未成对情况:

  1. 读取数据
wings <- read.table("https://zenodo.org/record/6950928/files/AT-raw-coordinates.csv", header = TRUE, sep = ";")
  1. 提取唯一标识前缀
    用正则表达式去掉文件名末尾的翅型后缀:
wings$prefix <- gsub("-(L|R)\\.dw\\.png$", "", wings$file)
  1. 统计并筛选未成对条目
# 统计每个前缀的出现次数
prefix_counts <- table(wings$prefix)

# 找出出现次数≠2的前缀
unpaired_prefixes <- names(prefix_counts[prefix_counts != 2])

# 查看所有未成对的完整条目
unpaired_entries <- wings[wings$prefix %in% unpaired_prefixes, ]
print(unpaired_entries)

方法二:按奇偶行配对检查

针对你提到的「奇数行左翅、偶数行右翅」规则,直接检查每一对的前缀是否一致:

# 生成配对组编号(每2行为一组)
pair_groups <- ceiling(seq_len(nrow(wings)) / 2)

# 检查每组内的前缀是否唯一(即左右翅属于同一样本)
valid_pairs <- tapply(wings$prefix, pair_groups, function(x) length(unique(x)) == 1)

# 找出无效配对组
invalid_groups <- names(valid_pairs[!valid_pairs])

# 查看无效组的所有条目
unpaired_by_row <- wings[ceiling(seq_len(nrow(wings)) / 2) %in% invalid_groups, ]
print(unpaired_by_row)

# 额外检查:如果总行数为奇数,最后一行必然未成对
if (nrow(wings) %% 2 != 0) {
  cat("注意:数据总行数为奇数,最后一行无配对条目:\n")
  print(tail(wings, 1))
}

说明

  • 方法一能覆盖所有异常情况(如单个翅重复录入、某一样本仅存单翅);
  • 方法二更贴合你描述的行顺序规则,能快速定位到配对错误的行组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:36:29