【问题标题】:Trying to calculate share - summarize function not working尝试计算份额 - 汇总功能不起作用
【发布时间】:2021-06-21 06:52:49
【问题描述】:

我正在尝试计算每个国家/地区的某个可变成本与总数相关的份额。但是,当我尝试通过 mutate 创建“share”列时,它会产生所有答案为 1。

我使用的代码如下:

db %>% 
  group_by(country,group) %>% 
  summarize(cost=sum(cost)) %>%
  mutate(share=cost/sum(cost))

这是它正在生成的表:

# Groups:   cluster [18]
   cluster group          cost share
   <chr>   <chr>           <dbl> <dbl>
 1 AT      A              7810.     1
 2 AU      C              7786.     1
 3 CA      C              5920.     1
 4 KO      B            172702.     1
 5 DE      A             40894.     1
 6 ES      A             26357.     1
 7 FR      A             65735.     1
 8 GB      C             11240.     1
 9 IT      A             85045.     1
10 JP      B             10069.     1

我尝试在 group_by() 上颠倒组和国家/地区的位置,但份额列仍将份额作为组的百分比返回,而不是总和。为什么会发生这种情况,我该如何解决?

【问题讨论】:

  • 没有任何改变。一定是别的东西

标签: r dplyr


【解决方案1】:

这是因为summarise 的默认行为是在按多个变量分组时输出分组数据帧(它丢弃一个变量并保留下一个变量)。 要解决它,您可以添加ungroup

db %>% 
  group_by(country,group) %>% 
  summarize(cost=sum(cost)) %>%
  ungroup() %>% 
  mutate(share=cost/sum(cost))

或从 dplyr 版本 > 1.0.0:

db %>% 
  group_by(country,group) %>% 
  summarize(cost=sum(cost), .groups = "drop") %>%
  mutate(share=cost/sum(cost))

【讨论】:

    猜你喜欢
    • 2021-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 2022-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多