首页 > 解决方案 > 根据两列选择不重复的记录

问题描述

假设我有:

V1  V2  id
R1  R2  1
R1  R3  2
R1  R5  3
R1  R7  4
R2  R1  5
R2  R3  6
R2  R8  7
R3  R1  8
R3  R2  9
R3  R6  10
R4  R9  11

生成数据集的代码:

dat1 <- data.frame(
  V1 = c(rep("R1", 4), rep("R2", 3), rep("R3", 3), "R4"),
  V2 = c("R2", "R3", "R5", "R7", "R1", "R3", "R8", "R1", "R2", "R6", "R9"), 
  stringsAsFactors = FALSE
)

dat1$id <- 1:nrow(dat1)

我想根据 V1 和 V2 列选择不重复的记录,例如 id 1 和 id 5 需要被视为相同的记录,因此应该选择 id 1。所以期望的结果是:

V1  V2  id
R1  R2  1
R1  R3  2
R1  R5  3
R1  R7  4
R2  R3  6
R2  R8  7
R3  R6  10
R4  R9  11

任何建议将不胜感激。

标签: rduplicatessubset

解决方案


apply sort使用 V1 和 V2 然后使用duplicated查找重复项

dat1[!duplicated(t(apply(dat1[,-3],1,sort))),]
   V1 V2 id
1  R1 R2  1
2  R1 R3  2
3  R1 R5  3
4  R1 R7  4
6  R2 R3  6
7  R2 R8  7
10 R3 R6 10
11 R4 R9 11

推荐阅读