R:在多列上找到相同的组合

时间:2018-06-05 16:15:04

标签: r

我很难解释我在寻找什么,但我尽我所能,所以请耐心等待。我有以下数据,包含个人对和每对的特定值:

Col1  Col2  Value
A     B     90
E     F     90
B     A     50
C     D     50
F     E     90

我想要做的是找到相同的组合(即A& B和B& A)及其各自的值,并将它们放在一起。然而,并非所有组合都是双重的(在我的例子中,只有C& D但没有D& C)。

我试图在第二个数据帧中复制数据,然后转向col1和col2,然后按col1排序。这给了我以下内容:

Col1  Col2  Value  Dummy
A     B     90     1
A     B     50     2
C     D     50     1
E     F     90     1
E     F     90     2
B     A     50     1
B     A     90     2
D     C     50     2
F     E     90     1
F     E     90     2

但我仍然在我的数据中同时拥有A& B和B& A.理想情况下,我想最终得到这个:

Col1  Col2  Value
A     B     90
B     A     50
C     D     50
E     F     90
F     E     90

我希望我的问题很清楚,否则我很乐意尝试更好地解释自己!

2 个答案:

答案 0 :(得分:1)

使用基础R,我们首先按min列,然后按第1列订购:

df[with(df,order(pmin(Col1,Col2),pmax(Col1,Col2),Col1)),]

#   Col1 Col2 Value
# 1    A    B    90
# 3    B    A    50
# 4    C    D    50
# 2    E    F    90
# 5    F    E    90

感谢@akrun提示。

tidyverse解决方案是:

library(dplyr)
df %>% arrange(pmin(Col1,Col2),pmax(Col1,Col2),Col1)

之前的解决方案:

df[order(
  apply(df[1:2],1,function(x) paste(sort(x),collapse="")),
  df$Col1),]

数据

df <- read.table(text=
"Col1  Col2  Value
A     B     90
E     F     90
B     A     50
C     D     50
F     E     90",h=T,strin=F
)

答案 1 :(得分:0)

您可以尝试data %>% distinct(Col1, Col2, Value) %>% arrange(Col1)

之类的内容