Итак, я решил это сам.
Оказывается @company/config
- это один из наших частных репозиториев NPM, размещенный на npm и определенный этим псевдонимом для внутреннего репозитория GitHub: он не имеет ничего общего с как работает require
.
Использование @
может быть или не быть протоколом, который я не знал о частных репозиториях NPM, помните об этом, если вы столкнетесь с этим.
Один из способов - создать дополнительные столбцы с 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 names
DT.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
Мой метод с функцией aggregate{stats}
:
> df
id1 id2 size
1 5400 5505 7
2 5033 5458 1
3 5452 2873 24
4 5452 5213 2
5 5452 4242 26
6 4823 4823 4
7 5505 5400 11
> df[1:2] <- t(apply(df[1:2], 1, sort))
> aggregate(size ~ id1 + id2, data=df, FUN=sum)
id1 id2 size
1 4823 4823 4
2 2873 5452 24
3 4242 5452 26
4 5213 5452 2
5 5033 5458 1
6 5400 5505 18
альтернативный метод:
R> library(igraph)
R> DF
id1 id2 size
1 5400 5505 7
2 5033 5458 1
3 5452 2873 24
4 5452 5213 2
5 5452 4242 26
6 4823 4823 4
7 5505 5400 11
R> 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 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
DT[, list(size = sum(size)), by = list(id1 = pmin(id1,id2), id2 = pmax(id1,id2))]
- который заботится о дубликатах, так как он их не создает. – mnel 18 March 2013 в 23:54