在一列中查找与另一列中的不同值相对应的重复值

Find reoccuring values in one column that correspond to differing values in another column

我有一个包含两列的数据框。第一列(“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

大多数数字总是与相同的字母匹配(例如“1”总是与“a”匹配),但有些数字与不同的字母匹配(例如“2”与“b”和“c”匹配”)。我想找到与多个字母匹配的数字。例如,结果应该是一个包含“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"))
library(tidyverse)
> distinct(example) %>% group_by(A) %>%
+   summarize(count = n()) %>%
+   filter(count > 1)
# A tibble: 2 x 2
      A count
  <dbl> <int>
1     2     2
2     5     3

另一种可能的解决方案,在base R中:

as.numeric(names(which(apply(table(example$A, example$B), 1, 
     \(x) sum(x == 0) != (length(x)-1)))))

#> [1] 2 5

与@Paul 相同但没有应用功能

names(which(rowSums(table(example$A, example$B) != 0) > 1))

-output
>
[1] "2" "5"