大问题: 我想要一个数据框中两个字段之间唯一组合的列表。
示例数据:
A B
C D
E F
B A
C F
E F
我希望能够得到4种独特组合的结果:AB,CD,EF和CF.由于BA和BA包含相同的组件但顺序不同,我只想要一个副本(这是一个相互关系,所以BA与AB是一样的)
尝试:
到目前为止,我已尝试排序并保留唯一的行:
sort file | uniq
但当然会产生5种组合:
A B
C D
E F
B A
C F
我不知道如何将AB / BA视为同样的方法。有关如何做到这一点的任何建议吗?
答案 0 :(得分:3)
惯用的awk方法是订购索引部分:
$ awk '!seen[$1>$2 ? $1 FS $2 : $2 FS $1]++' file
A B
C D
E F
C F
答案 1 :(得分:3)
另一个awk
魔法
awk '!a[$1,$2] && !a[$2,$1]++' file
答案 2 :(得分:2)
在awk中:
$ awk '($1$2 in a){next}{a[$1$2];a[$2$1]}1' file
A B
C D
E F
C F
说明:
($1$2 in a) { next } # if duplicate in hash, next record
{ a[$1$2]; a[$2$1] } 1 # hash reverse also and output
适用于单个字段。如果您想将其用于更长的字符串,请在字段之间添加FS
,例如a[$1 FS $2]
等。(感谢@EdMorton)。