Различный вывод между суммой и + - PullRequest
2 голосов
/ 28 марта 2020

Я работаю над проблемой, которая заключается в суммировании всех строк на основе их идентификатора и суммировании некоторых специфических c переменных, чтобы получить консолидированный набор данных для ввода в другую работу, но есть проблема с функцией суммы и я был бы признателен за некоторые пояснения по этому поводу.

Набор данных:

teste <- data.frame(ID = c(1, 1, 2, 1, 3, 3, 2),
                    VALUE = c(10, 10, 10, 10, 10, 10, 10),
                    MOD = c(1, 1, 1, 1, 1, 1, 1))

  ID VALUE MOD
1  1    10   1
2  1    10   1
3  2    10   1
4  1    10   1
5  3    10   1
6  3    10   1
7  2    10   1

Использование оператора +:

teste %>%
    group_by(ID) %>%
    summarise_all(sum, na.rm = TRUE) %>%
    mutate(CONS = VALUE + MOD)

# A tibble: 3 x 4
     ID VALUE   MOD  CONS
  <dbl> <dbl> <dbl> <dbl>
1     1    30     3    33
2     2    20     2    22
3     3    20     2    22

Использование функции sum :

teste %>%
    group_by(ID) %>%
    summarise_all(sum, na.rm = TRUE) %>%
    mutate(CONS = sum(VALUE, MOD))

# A tibble: 3 x 4
     ID VALUE   MOD  CONS
  <dbl> <dbl> <dbl> <dbl>
1     1    30     3    77
2     2    20     2    77
3     3    20     2    77

1 Ответ

2 голосов
/ 28 марта 2020

summarize_all удаляет один уровень группировки , поэтому перегруппируйте его:

teste %>%
    group_by(ID) %>%
    summarise_all(sum, na.rm = TRUE) %>%
    group_by(ID) %>%   # <--------------------------
    mutate(CONS = sum(VALUE, MOD)) %>%
    ungroup

, давая:

# A tibble: 3 x 4
# Groups:   ID [3]
     ID VALUE   MOD  CONS
  <dbl> <dbl> <dbl> <dbl>
1     1    30     3    33
2     2    20     2    22
3     3    20     2    22
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...