特殊删除R数据帧中的重复行

时间:2017-04-02 02:29:22

标签: r dataframe duplicates

假设我的数据框df为:

df<- data.frame(id1=c('A','B','C','D','P'), id2=c('P','H','Q','S','A'),weight=c(3,4,2,7,3))

  id1 id2 weight
1   A   P      3
2   B   H      4
3   C   Q      2
4   D   S      7
5   P   A      3

此数据框是加权无向图的边列表表示。在这个例子中,我想删除第一行或最后一行,因为它们是重复的边。当然,我想对所有重复的边缘做同样的事情。

我试过了:

w=df[!duplicated(df[,c('id1', 'id2','weight')]),]

但这还不够。

1 个答案:

答案 0 :(得分:1)

我们可以使用pmin/pmax

df[!duplicated(cbind(pmin(df$id1, df$id2), pmax(df$id1, df$id2))),]
#   id1 id2 weight
#1   A   P      3
#2   B   H      4
#3   C   Q      2
#4   D   S      7

数据

df<- data.frame(id1=c('A','B','C','D','P'), 
     id2=c('P','H','Q','S','A'),weight=c(3,4,2,7,3), stringsAsFactors=FALSE)