Как сделать обратную матрицу в формате списка с помощью dplyr [R] [duplicate]

Итак, я решил это сам.

Оказывается @company/config - это один из наших частных репозиториев NPM, размещенный на npm и определенный этим псевдонимом для внутреннего репозитория GitHub: он не имеет ничего общего с как работает require.

Использование @ может быть или не быть протоколом, который я не знал о частных репозиториях NPM, помните об этом, если вы столкнетесь с этим.

5
задан R_User 18 March 2013 в 23:37
поделиться

3 ответа

Один из способов - создать дополнительные столбцы с 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
8
ответ дан Arun 17 August 2018 в 13:48
поделиться
  • 1
    Я думаю, что писать его на нескольких строках, а композиции помогут OP +, но вы набираете быстрее меня – statquant 18 March 2013 в 23:40
  • 2
    Вы можете создать g1 и g2 в аргументе by. – mnel 18 March 2013 в 23:40
  • 3
    @mnel, это блестяще. Сделает редактирование. Любая идея, как удалить повторяющиеся строки на основе 2 столбцов без переменной temp? – Arun 18 March 2013 в 23:43
  • 4
    Почему не просто DT[, list(size = sum(size)), by = list(id1 = pmin(id1,id2), id2 = pmax(id1,id2))] - который заботится о дубликатах, так как он их не создает. – mnel 18 March 2013 в 23:54
  • 5
    еще раз, я беру поклон! :) – Arun 18 March 2013 в 23:58

Мой метод с функцией 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
0
ответ дан Darren 17 August 2018 в 13:48
поделиться

альтернативный метод:

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
3
ответ дан margaret 17 August 2018 в 13:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: