如何仅在另一列不同时在两列中查找重复项
How to find duplicates in two columns only while another column is different
我想找到两个(或更多)行具有相同 x,y(位置)但 ID 不同的位置。
在下面的 table 中,我只想知道最后两行。
x
y
id
1
2
1
1
2
1
1
3
4
2
3
1
2
3
2
# example data
x <- read.table(text = "x y id
1 2 1
1 2 1
1 3 4
2 3 1
2 3 2", header = TRUE)
按两列分组,计算第3列的唯一值,如果大于1则进行子集:
x[ ave(x[, "id"], x[, c("x", "y") ], FUN = function(i) length(unique(i))) > 1, ]
# x y id
# 4 2 3 1
# 5 2 3 2
另一种方式,使用dplyr
:
x %>%
group_by(x, y) %>%
filter(n_distinct(id) > 1)
# A tibble: 2 x 3
# Groups: x, y [1]
x y id
<int> <int> <int>
1 2 3 1
2 2 3 2
使用data.table
library(data.table)
i1 <- setDT(x)[, .I[uniqueN(id) > 1], .(x, y)]$V1
x[i1]
x y id
<int> <int> <int>
1: 2 3 1
2: 2 3 2
我想找到两个(或更多)行具有相同 x,y(位置)但 ID 不同的位置。
在下面的 table 中,我只想知道最后两行。
x | y | id |
---|---|---|
1 | 2 | 1 |
1 | 2 | 1 |
1 | 3 | 4 |
2 | 3 | 1 |
2 | 3 | 2 |
# example data
x <- read.table(text = "x y id
1 2 1
1 2 1
1 3 4
2 3 1
2 3 2", header = TRUE)
按两列分组,计算第3列的唯一值,如果大于1则进行子集:
x[ ave(x[, "id"], x[, c("x", "y") ], FUN = function(i) length(unique(i))) > 1, ]
# x y id
# 4 2 3 1
# 5 2 3 2
另一种方式,使用dplyr
:
x %>%
group_by(x, y) %>%
filter(n_distinct(id) > 1)
# A tibble: 2 x 3
# Groups: x, y [1]
x y id
<int> <int> <int>
1 2 3 1
2 2 3 2
使用data.table
library(data.table)
i1 <- setDT(x)[, .I[uniqueN(id) > 1], .(x, y)]$V1
x[i1]
x y id
<int> <int> <int>
1: 2 3 1
2: 2 3 2