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

R语言查找数据框中对应另一列多值的单列重复值

问题说明

现有一个包含两列的R数据框(data.frame):

  • 第一列列名为A,存储数值
  • 第二列列名为B,存储字母
    示例数据结构如下:
A B
1 a
1 a
1 a
2 b
2 c
3 d
4 e
4 e
5 f
5 g
5 g
5 h

数据规律为:多数A列的数值固定匹配同一个B列字母(例如1始终匹配a),但部分数值会匹配多个不同字母(例如2同时匹配b和c)。需求为查找所有匹配了多个不同字母的A列数值,以上述示例为例,最终返回结果应为包含2和5的向量。

可复现测试数据

运行以下代码即可加载示例数据:

example <- read.table(textConnection('
A B
1 a
1 a
1 a
2 b
2 c
3 d
4 e
4 e
5 f
5 g
5 g
5 h
'), header = TRUE, colClasses=c("double", "character"))
实现方案

基础R(无需加载第三方包)

写法1(可读性更高)

# 按A列分组,统计每组对应不同B值的数量
group_stat <- aggregate(B ~ A, data = example, FUN = function(x) length(unique(x)))
# 筛选匹配多个字母的A值,输出为向量
result <- group_stat$A[group_stat$B > 1]

运行后result的输出为[1] 2 5,符合预期。

写法2(更简洁)

result <- as.numeric(names(which(tapply(example$B, example$A, \(x) length(unique(x))) > 1)))

dplyr 实现(适合管道操作场景)

如果日常使用tidyverse生态,可使用以下写法,逻辑更直观:

library(dplyr)

result <- example %>%
  distinct(A, B) %>% # 保留所有不重复的A-B配对
  count(A) %>% # 统计每个A值对应的唯一B值数量
  filter(n > 1) %>% # 筛选匹配数大于1的记录
  pull(A) # 提取A列作为结果向量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 06:45:44