r-使用dplyr过滤一列中的值由另一列中不同类别共享的行



我有一个数据帧:

col1    col2    col3
a        1      n1
a        1      n2
a        2      n3  
a        2      n4
b        2      n5
b        3      n6
c        4      n7
c        5      n8
c        6      n9

我想返回col2中的值被col1中的两个或多个类别共享的所有行,即:

a   2   n3
a   2   n4
b   2   n5

这似乎是一个简单的问题,但我一直在努力寻找一个有效的解决方案。一直在玩滤镜、dplyr中的复制等组合,但都无济于事。很多麻烦都来自于col2中有多个重复项,我不想过滤掉(因为它们在col1中是相同的(。

data %>% group_by(col1) %>% filter(???)

非常感谢您的帮助!

这行得通吗?在CCD_ 1上分组并查找>CCD_ 2的值为1。

library(dplyr)
data %>% 
group_by(col2) %>% 
filter(n_distinct(col1) > 1) %>%
ungroup()

结果:

# A tibble: 3 × 3
col1   col2 col3 
<chr> <int> <chr>
1 a         2 n3   
2 a         2 n4   
3 b         2 n5

使用base R

subset(data, col2 %in% names(which(lengths(with(unique(data[1:2]), 
split(col1, col2))) > 1)))
col1 col2 col3
3    a    2   n3
4    a    2   n4
5    b    2   n5

最新更新