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

在R中筛选ID非唯一且对应Value相同的数据行

解决方案

先构造测试数据:

df <- data.frame(
  ID = c(1,1,1,2,3,3,4,4),
  Value = c("A","A","B","C","B","B","A","C")
)

方法一:Base R

  1. 先找出出现次数大于1的ID:
id_counts <- table(df$ID)
valid_ids <- names(id_counts[id_counts > 1])
  1. 统计每个(ID, Value)组合的出现次数,筛选出符合条件的组合:
id_val_counts <- table(df$ID, df$Value)
valid_pairs <- which(id_val_counts > 1, arr.ind = TRUE)
valid_pairs <- data.frame(
  ID = rownames(valid_pairs),
  Value = colnames(valid_pairs)[valid_pairs[,2]]
)
  1. 从原数据中匹配符合条件的行:
result <- subset(df, paste(ID, Value) %in% paste(valid_pairs$ID, valid_pairs$Value))

方法二:dplyr(更简洁)

先加载dplyr包,通过分组统计筛选:

library(dplyr)

result <- df %>%
  # 按ID分组,计算每个ID的总出现次数
  group_by(ID) %>%
  mutate(id_total = n()) %>%
  # 按ID+Value分组,计算该组合的出现次数
  group_by(ID, Value) %>%
  mutate(val_count = n()) %>%
  # 取消分组,筛选条件:ID总次数>1,且该Value在对应ID中出现次数>1
  ungroup() %>%
  filter(id_total > 1, val_count > 1) %>%
  # 移除临时统计列
  select(-id_total, -val_count)

两种方法最终得到的结果都符合预期:

ID Value
1  1     A
2  1     A
3  3     B
4  3     B

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 18:42:24