r - 根据两列选择不重复的记录
问题描述
假设我有:
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
任何建议将不胜感激。
解决方案
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
推荐阅读
- python - “with”语句中的交互模式
- amazon-web-services - Codepipeline/Codebuild pipelines 在创建特定的 github 分支时可以启动吗
- angular - 动态更改设置不适用于 ng2-smart-table 中的“noDataMessage”
- java - 输入将数组从一个类打印到另一个 Java(如注册数组)
- java - 使用 java 的 Mongodb 中的实体少持久性支持
- windows - 在通过网络服务帐户运行的服务中使用特定于用户的应用程序数据
- php - 错误未加括号的`a?乙:丙?d : e` 不受支持。使用 `(a ? b : c) ? d:e`或`a?b : (c ? d : e)`
- terraform - terraform 应用后,舵列表未显示
- python - 如何为 Django 表单字段设置永久值
- mysql - 如何在 MySQL 中使用不同日期更新每一行中的日期