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

如何在R数据框中保留成对ID数据,排除单例与三例?

高效筛选成对ID的R实现方法

方法一:用tidyverse(dplyr)快速处理

核心思路是按sib_ID分组,只保留组内唯一ID数量恰好为2的行,代码简洁且性能优异:

library(dplyr)

df_filtered <- df %>%
  group_by(sib_ID) %>%
  filter(n_distinct(ID) == 2) %>%
  ungroup()

# 查看筛选后的数据
df_filtered
  • group_by(sib_ID):按同胞ID分组,把同属一组的ID归到一起
  • n_distinct(ID):统计每组内的唯一ID数量
  • filter(...):只保留数量为2的组,自动过滤掉单例、三例的组

方法二:用Base R原生实现(无需额外包)

如果不想加载外部包,用原生代码也能高效完成:

# 先统计每个sib_ID对应的唯一ID数量
sib_id_stats <- table(unique(df[, c("ID", "sib_ID")])$sib_ID)
# 提取出符合条件的sib_ID(对应2个唯一ID)
valid_sibs <- names(sib_id_stats[sib_id_stats == 2])
# 筛选原数据
df_filtered <- df[df$sib_ID %in% valid_sibs, ]

# 查看结果
df_filtered
  • 先通过unique去重ID与sib_ID的组合,避免重复统计同一ID
  • 用table计数每个sib_ID对应的唯一ID数,再筛选出数量为2的项
  • 最后用%in%匹配原数据中的有效sib_ID,完成筛选

两种方法都能得到你需要的结果,处理大数据量时dplyr的优化会更有优势,轻量场景下Base R方法更直接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 01:00:59