Почему сумма сгруппированных переменных не работает? - PullRequest
1 голос
/ 31 марта 2019

Я пытаюсь суммировать значения столбца кадра данных ( дисперсия ) в соответствии с группой, к которой они принадлежат ( Типы ). Поскольку существует только три « типа » (MRF, OH и SDH), должно быть 3 уникальных значения, но я получаю только 1 уникальное значение (общая сумма дисперсия ). Фрейм данных, который я использую (dat_joined), выглядит следующим образом:

IndicatorID AreaName           standardised variance Type     
10401       Hartlepool                0.601   13478. MRF     
13333       Middlesbrough             0.481   10000. MRF     

Я запустил этот код, который, кажется, игнорирует тот факт, что я сгруппирован по типу.

dat_weighted <- dat_joined %>%
  distinct(IndicatorName, AreaName, .keep_all = TRUE) %>%
  group_by(Type)%>%
  mutate(sum=sum(dat_joined[,4]))

В результате я получил это (упрощенный df):

IndicatorID AreaName           standardised variance Type      sum
10401       Hartlepool                0.601   13478. MRF     25037
13333       Middlesbrough             0.481   10000. MRF     25037
...         ...                       ...     ...    ...     ...
95555       Barnsley                  0.601      14. HO       25037
96666       Oxford                    0.481       1. HO       25037
...         ...                       ...       ...  ...     ...
93347       Staffordshire             0.250     71.0 SDH      25037
11401       Southend                  0.310     80.1 SDH      25037

Однако я ожидаю получить разные результаты для каждой суммы, например:

IndicatorID AreaName           standardised variance Type      sum
10401       Hartlepool                0.601   13478. MRF     25000
13333       Middlesbrough             0.481   10000. MRF     25000
...         ...                       ...     ...    ...     ...
95555       Barnsley                  0.601      14. HO         17.
96666       Oxford                    0.481       1. HO         17.
...         ...                       ...       ...  ...     ...
93347       Staffordshire             0.250     71.0 SDH        20.
11401       Southend                  0.310     80.1 SDH        20.

Спасибо!

1 Ответ

0 голосов
/ 01 апреля 2019

Проблема использует dat_joined[,4], которая извлечет весь 4-й столбец.Вместо этого используйте имена столбцов без кавычек в пределах mutate, которые учитывают структуру группы, чтобы вычислить sum интересующего столбца

library(dplyr)
dat_weighted <- dat_joined %>%
                  distinct(IndicatorName, AreaName, .keep_all = TRUE) %>%
                  group_by(Type)%>%
                  mutate(sum=sum(variance))
...