考虑以下数据框:
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()
无济于事。
答案 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