【发布时间】:2016-07-31 19:13:26
【问题描述】:
围绕这个问题有很多问题,但我无法找到我特别关心的问题的答案。我有一个具有这种通用格式的数据框。
dat <- data.frame(V1 = c(1,1,2,1,2,4,5), V2 = c(1,2,1,2,1,5,4), V3 = c('date1','date1','date2','date3','date4','date1','date2'))
dat
V1 V2 V3
1 1 date1
2 1 date1
1 2 date2
1 2 date3
2 1 date4
5 4 date1
4 5 date2
我想从第 1 列和第 2 列中找到唯一对(以便第 2、3、4、5 行都合并为一个唯一对),而不管顺序如何 (1, 2 = 2, 1)。我在 SO (Unique pairs in R, ignoring order) 上找到了这个不错的代码
colwise <- function(dat) data.frame(unique(cbind(pmin(dat[,1], dat[,2]), pmax(dat[,1], dat[,2]))))
这非常适合拉出第 1 列和第 2 列。
colwise(dat)
V1 V2
1 1
1 2
4 5
但是,我想找到唯一对(如上),但还包括每个唯一对的原始数据集中的整个第一行。在上面的示例中,最终输出将是
dat
V1 V2 V3
1 1 date1
1 2 date1
4 5 date1
在我的实际数据集中,我有更多的列和大约 100 万行,尽管只有 100-200 个真正唯一的列 1 和 2 组合。此外,唯一的对列实际上不是我的数据集中的第 1、2 列,所以指定特定列以测试唯一性的能力很重要。
对于如何修改 colwise 函数或如何使用生成的一组唯一对从原始数据帧中提取基于该唯一对的第一整行,是否有人有一些好的想法?
谢谢
【问题讨论】:
标签: r