Подведение итогов выбранных строк-дубликатов - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть данные, которые выглядят так.

enter image description here

I wi sh, чтобы суммировать столбец значений для строк, имеющих одинаковое имя, время и сайт. В этом случае строки 3 и 4 суммируются, а строки 5 и 7 суммируются.

I sh, чтобы результирующий фрейм данных выглядел следующим образом.

enter image description here

пример данных:

    name = c('a', 'a', 'b' , 'b', 'c', 'c', 'c', 'd')
    time = c(1,2,1,1,3,3,3,4)
    site = c('A', 'A', 'A', 'A','B', 'D','B', 'E')
    value = c(5,8,1,0,7,0,8,10)

mock = data.frame(name, time,site,value)

Ответы [ 3 ]

1 голос
/ 20 февраля 2020

Мне действительно нравится data.table способ сделать это:

library(data.table)
data[, .(value = sum(value)), by = list(name, time, site)]

   name time site value
1:    a    1    A     5
2:    a    2    A     8
3:    b    1    A     1
4:    c    3    B    15
5:    c    3    D     0
6:    d    4    E    10

Хорошая вещь с data.table в том, что порядок ваших строк в первом столбце не меняется, пока aggregate() измени это.

0 голосов
/ 20 февраля 2020

Вы можете использовать базу R aggregate, чтобы сделать это, то есть

> aggregate(value~.,mock,sum)
  name time site value
1    a    1    A     5
2    b    1    A     1
3    a    2    A     8
4    c    3    B    15
5    c    3    D     0
6    d    4    E    10
0 голосов
/ 20 февраля 2020

Вот ответ на вопрос:

mock <- mock %>%
  group_by(name, time, site) %>%
  summarize(value = sum(value))
  name   time site  value
  <fct> <dbl> <fct> <dbl>
1 a         1 A         5
2 a         2 A         8
3 b         1 A         1
4 c         3 B        15
5 c         3 D         0
6 d         4 E        10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...