首先观察多个列中每个重复的值组合

时间:2018-04-10 10:40:05

标签: r dplyr

我的数据:

    var1 <- c(1, 2, 3, 4, 5, 28, 6)
    var2 <- c(2, 1, 10, 11, 6, 78, 5)
    var3 <- c(100,101,102,0,0,0, 0)
    dataset<- data.frame(var1, var2, var3)
    datset

我的结果:

  var1 var2 var3   
    1   2   100     
    2   1   101     
    3   10  102 
    4   11  0       
    5   6   0       
    28  78  0       
    6   5   0   

我在var1var2列中有两种重复值组合(按任意顺序):
第一个:

  var1 var2 var3   
    1   2   100 
    2   1   101
第二个:

  var1 var2 var3   
    5   6   0               
    6   5   0   

预期结果: 首先观察多个列中的每个重复的值组合(var1var2):

  var1 var2 var3   
    1   2   100 
    3   10  101 
    4   11  102 
    5   6   0       
    28  78  0       

完整数据集csv

1 个答案:

答案 0 :(得分:3)

我们可以在前两列的每一行的duplicated ed元素上使用sort来获得预期的输出

dataset[!duplicated(t(apply(dataset[1:2], 1, sort))),]

或另一种选择是在duplicatedpmin

上应用pmax
library(data.table)
setDT(dataset)[!duplicated(dataset[, .(var1 = pmin(var1, var2), var2 = pmax(var1, var2))])]

更新

基于OP的完整数据集

df1 <- na.omit(read.csv(file.choose(), row.names = 1))
out <- df1[!duplicated(t(apply(df1[1:2], 1, sort))),]
dim(out)
#[1] 113   3


out2 <- setDT(df1)[!duplicated(df1[, .(from = pmin(from, to), to = pmax(from, to))])]
dim(out2)
#[1] 113   3