为什么分组变量的总和不起作用?

时间:2019-03-31 16:56:16

标签: r group-by sum aggregate mutate

我试图根据它们所属的组( Types )对数据框的列值( variance )求和。由于只有三种“ 类型”(MRF,OH和SDH),因此应该有3个唯一值,但我只有1个唯一值( variance 的总和)。 我正在使用的数据框(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 :(得分:0)

问题是使用dat_joined[,4],它将提取整个第四列。请勿这样做,而应在mutate中使用未加引号的列名,并且应遵循组结构来计算目标列的sum

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