从数据框中删除包含任意两列组合的重复行

3

我正在尝试从一个数据框中删除包含任意两列组合的行。例如,下面的代码:

vct <- c("A", "B", "C")
a <- b <- vct
combo <- expand.grid(a,b) #generate all posible combinations
combo <- combo[!combo[,1] == combo[,2],] #removes rows with matching column

生成此数据帧:
 Var1 Var2
2    B    A
3    C    A
4    A    B
6    C    B
7    A    C
8    B    C

我该如何删除任意两列的重复行,例如在已经存在#2 B A的情况下,将删除#4 A B?最终得到的数据框应该是这样的:
 Var1 Var2
2    B    A
3    C    A
4    C    B
1个回答

5
我们可以使用应用程序和MARGIN=1对行进行排序,然后转置输出,使用duplicated获取重复行的逻辑索引,使用!获取未重复的行,并对数据集进行子集。
combo[!duplicated(t(apply(combo, 1, sort))),]
#   Var1 Var2
#2    B    A
#3    C    A
#6    C    B

1
做到了,谢谢! - trock2000
@trock2000 没问题。很高兴能帮助你。 - akrun
1
@Alex 试试 combo %>% filter(!duplicated(str_c(pmin(Var1, Var2), pmax(Var1, Var2) ))) - akrun
1
@Alex 它将每行的逐元素最小值和最大值粘合在一起,然后对其执行重复操作。minmax 的返回值基于字母数字顺序。 - akrun
1
@akrun,感谢您的帮助。 - Alex
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接