我有一个数据帧:
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