假设我的数据框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')]),]
但这还不够。
答案 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)