【问题标题】:Calculate ratio for subsets within subsets using dplyr使用 dplyr 计算子集内子集的比率
【发布时间】:2020-05-22 17:02:49
【问题描述】:

我有一组许多作者 (AU) 的数据,跨越多年 (Year) 和多个主题 (Topic)。对于每个 AU、Year 和 Topic 组合,我想计算年度总 FL 与 Topic / 总 FL 的比率。

数据将如下所示:

Data <- data.frame("AU" = c(1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2),
               "Year" = c(2010,2010,2010,2010,2010,2010,2011,2011,2011,2011,2010,2010,2010,2011,2011,2011,2011,2010,2011,2011),
               "Topic" = c(1,1,1,2,2,2,1,1,2,2,2,2,2,1,1,1,1,1,1,1),
               "FL" = c(1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,0,0,1,1,1))

我一直在玩 dplyr 试图弄清楚如何做到这一点。我可以很容易地分组,但我不确定如何使用“组”作为分子来计算比率,使用所有组的总数作为分母

Results <- Data %>%
  group_by(Year, AU) %>%
  summarise(ratio = ???) # Should be (Sum(FL) by Topic) / (Sum(FL) across all Topics)

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    如果我正确理解了您想要的输出,您可以分别计算按主题、年份、AU 的总数和按年份、AU 的总数,然后使用left_join 将它们连接在一起。

    left_join(
      Data %>% 
        group_by(AU, Year, Topic) %>% 
        summarise(FL_topic = sum(FL)) %>% 
        ungroup(),
      Data %>% 
        group_by(AU, Year) %>% 
        summarise(FL_total = sum(FL)) %>% 
        ungroup(),
      by = c("AU", "Year")
    ) %>% 
      mutate(ratio = FL_topic/FL_total)
    
    # A tibble: 7 x 6
    #      AU  Year Topic FL_topic FL_total ratio
    #   <dbl> <dbl> <dbl>    <dbl>    <dbl> <dbl>
    # 1     1  2010     1        2        4  0.5 
    # 2     1  2010     2        2        4  0.5 
    # 3     1  2011     1        0        2  0   
    # 4     1  2011     2        2        2  1   
    # 5     2  2010     1        1        4  0.25
    # 6     2  2010     2        3        4  0.75
    # 7     2  2011     1        4        4  1   
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-17
      • 2015-04-13
      • 1970-01-01
      • 1970-01-01
      • 2021-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多