我很难解释我在寻找什么,但我尽我所能,所以请耐心等待。我有以下数据,包含个人对和每对的特定值:
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
我希望我的问题很清楚,否则我很乐意尝试更好地解释自己!
答案 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)