R在数据帧中生成非重复对

时间:2016-03-16 22:57:12

标签: r dataframe

因此,目的是通过距离比较每个ID与彼此的ID。

考虑以下数据框Df

ID AN     AW
a  white  green
b  black  yellow
c  purple gray
d  white  gray

为了比较我需要一个如下所示的组合:

ID   AN     AW    ID2   AN2    AW2
a  white  green   b   black  yellow
a  white  green   c   purple gray
a  white  green   d   white  gray
b   black  yellow c   purple gray 
b   black  yellow d   white  gray
c   purple gray   d   white  gray

基本上我试图实现所有组合,以便在属于每个ID的特征之间取得距离。

我现在真的不知道如何开始。任何见解? R我可以使用哪些工具?

1 个答案:

答案 0 :(得分:4)

使用combn和match的一种可能的解决方案。

ids <- combn(unique(df$ID), 2)
data.frame(df[match(ids[1,], df$ID), ], df[match(ids[2,], df$ID), ])

#     ID     AN     AW ID.1   AN.1   AW.1
# 1    a  white  green    b  black yellow
# 1.1  a  white  green    c purple   gray
# 1.2  a  white  green    d  white   gray
# 2    b  black yellow    c purple   gray
# 2.1  b  black yellow    d  white   gray
# 3    c purple   gray    d  white   gray