【问题标题】:Why does the sum of grouped variables not work?为什么分组变量的总和不起作用?
【发布时间】:2019-03-31 16:56:16
【问题描述】:

我正在尝试根据数据框所属的组(类型)总结数据框列的值(方差)。由于只有三个“类型”(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.

谢谢!

【问题讨论】:

  • 我认为您需要指定不带引号的列名而不是dat[,5] BTW,dat 是什么?使用dat[,5],它不会保留分组信息,而是从数据集中提取整列
  • dat[,5] 打错了,我把它改成了 dat_joined[,5]
  • 从帖子来看,第5列好像是Type,是一个字符列。如果您需要“方差”总和,请使用%&gt;% mutate(sum = sum(variance))
  • 是的,这也是一个错字,对不起!
  • @akrun 谢谢,解决了!

标签: r group-by sum aggregate dplyr


【解决方案1】:

问题是使用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))

【讨论】:

    猜你喜欢
    • 2011-05-12
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    相关资源
    最近更新 更多