-
潇潇雨雨
一种方法是与创建额外的列pmax和pmin的id1和id2如下。我将data.table在这里使用解决方案。require(data.table)DT <- data.table(DF)# Following mnel's suggestion, g1, g2 could be used directly in by# and it could be even shortened by using `id1` and id2` as their namesDT.OUT <- DT[, list(size=sum(size)), by=list(id1 = pmin(id1, id2), id2 = pmax(id1, id2))]# id1 id2 size# 1: 5400 5505 18# 2: 5033 5458 1# 3: 5452 2873 24# 4: 5452 5213 2# 5: 5452 4242 26# 6: 4823 4823 4
-
慕后森
替代方法:R> library(igraph)R> DF id1 id2 size1 5400 5505 72 5033 5458 13 5452 2873 244 5452 5213 25 5452 4242 266 4823 4823 47 5505 5400 11R> g <- graph.data.frame(DF, directed=F)R> g <- simplify(g, edge.attr.comb="sum", remove.loops=FALSE)R> DF <- get.data.frame(g)R> DF id1 id2 size1 5400 5505 182 5033 5458 13 5452 2873 244 5452 5213 25 5452 4242 266 4823 4823 4
-
慕尼黑的夜晚无繁华
我的aggregate{stats}函数方法:> df id1 id2 size1 5400 5505 72 5033 5458 13 5452 2873 244 5452 5213 25 5452 4242 266 4823 4823 47 5505 5400 11> df[1:2] <- t(apply(df[1:2], 1, sort))> aggregate(size ~ id1 + id2, data=df, FUN=sum) id1 id2 size1 4823 4823 42 2873 5452 243 4242 5452 264 5213 5452 25 5033 5458 16 5400 5505 18