Удалить дублирующиеся строки и суммировать соответствующие значения последнего столбца в кадре данных - PullRequest
1 голос
/ 22 февраля 2020

Если мы хотим удалить дубликаты из кадра данных df, нам нужно просто написать df[!duplicated(df),], и дубликаты будут удалены из него. У меня есть следующий фрейм данных:

df <- data.frame(from = c("z","y","z","w","y"), to=c("x","w","x","z","w"), weight=c(2,1,3,5,6))

Я хотел бы получить что-то другое. В df[,1:2] первая и третья строки равны между ними, и я хотел бы: 1) удалить одну из них; 2) суммируйте соответствующие значения веса. Например, для этого примера ожидаемый результат:

   from to weight
     z  x      5
     y  w      7
     w  z      5

В любом случае, если я использую:

df2=df[,1:2]
which(duplicated(df2) | duplicated(df2[nrow(df2):1, ])[nrow(df2):1])

, я получаю

[1] 1 2 3 5

, что не позволяет мне чтобы получить желаемый результат (например, 1 и 3 равны между ними, 2 и 5 равны между ними, но эта информация не содержится в последнем результате).

Ответы [ 2 ]

2 голосов
/ 22 февраля 2020

Мы можем создать группу с помощью операции sum вместо duplicated

aggregate(weight~ ., df, sum)

В dplyr это можно сделать с помощью

library(dplyr)
df %>%
   group_by(from, to) %>%
   summarise(weight = sum(weight))
0 голосов
/ 22 февраля 2020

Отличное решение, простое и понятное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...