【问题标题】:how to calculate proportion by another variable (not by frequency) in dplyr in R如何通过R中dplyr中的另一个变量(而不是频率)计算比例
【发布时间】:2019-06-06 19:45:23
【问题描述】:

使用 mtcars 数据,我想计算每组 cyl 和 am 的 mpg 比例。如何计算它?

mtcars %>%
   group_by(cyl, am) %>%
   summarise(mpg = n(mpg)) %>%
   mutate(mpg.gr = mpg/(sum(mpg))

提前致谢!

【问题讨论】:

  • 你能为一两个组提供一些示例输出吗?目前还不清楚你在问什么。对于每个组,您想要平均 mpg?
  • mpg 的比例是什么意思,因为它是一个连续变量,而不是二进制?
  • 不知道您所说的 “不是按频率”是什么意思,但也许只是 - mtcars %>% group_by(cyl, am) %>% summarise(mpg = mpg/sum(mpg)) 尽管这在 mtcars 上下文中没有意义。跨度>
  • 在另一个例子中我的意思是:人口比例=一个城市的地区人口除以城市的总人口。假设我有城市变量(包含 5 个城市的信息)和区(有些城市有 4 个区,有些有 3 个)

标签: r group-by dplyr


【解决方案1】:

如果我理解正确,您需要cylam 的每个组合的记录比例。如果是这样,那么我相信您的代码不起作用,因为n() 不接受参数。在计算你的比例之前,你还需要ungroup()

你可以这样做:

mtcars %>%
   group_by(cyl, am) %>%
   summarise(mpg = n()) %>%
   ungroup() %>%
   mutate(mpg.gr = mpg/(sum(mpg))

#> # A tibble: 6 x 4
#>     cyl    am   mpg mpg.gr
#>   <dbl> <dbl> <int>  <dbl>
#> 1     4     0     3 0.0938
#> 2     4     1     8 0.25  
#> 3     6     0     4 0.125 
#> 4     6     1     3 0.0938
#> 5     8     0    12 0.375 
#> 6     8     1     2 0.0625

请注意,感谢ungroup(),比例是使用所有记录的计数来计算的,而不仅仅是cyl 组中的记录,就像以前一样。

【讨论】:

  • @Felix T。感谢您的帮助。但我想要的是得到 mpg 的实际值(而不是像 3 $ 8 这样的计数)除以实际 mpg 值的总和。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-24
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多