如何删除重复的成对列

时间:2015-02-27 03:03:50

标签: r

考虑以下数据框:

df <- data.frame(V1 = c("A", "A", "B", "B", "C", "C"),
           V2 = c("B", "C", "A", "C", "A", "B"),
           n = c(1, 3, 1, 2, 3, 2))

如何删除重复的成对列,以便输出如下所示:

#   V1 V2 n
#1  A  B 1
#2  A  C 3
#3  B  C 2

我尝试unique()duplicated()无济于事。

2 个答案:

答案 0 :(得分:3)

不确定这是否是最简单的方法(转置可能在计算上很昂贵),但这适用于您的数据框:

df <- data.frame(V1 = c("A", "A", "B", "B", "C", "C"),
                 V2 = c("B", "C", "A", "C", "A", "B"),
                 n = c(1, 3, 1, 2, 3, 2))

首先,按行排序数据框,这样你的值对就变成了真正的重复。

df <- data.frame(t(apply(df, 1, sort)))

然后您可以应用unique功能。

df <- unique(df)

如果您的列名称和顺序很重要,则必须重新建立列名称。

names(df) <- c("n", "V1", "V2")
df <- df[, c("V1", "V2", "n")]

答案 1 :(得分:1)

另一种选择是将数据集(&#39; df&#39;)重新整形(xtabs(n~..))为宽格式,将下三角矩阵设置为0,并使用&#34; Freq&删除行#34;等于0。

m1 <- xtabs(n~V1+V2, df)
m1[lower.tri(m1)] <- 0
subset(as.data.frame(m1), Freq!=0)
#  V1 V2 Freq
#4  A  B    1
#7  A  C    3
#8  B  C    2