代码之家  ›  专栏  ›  技术社区  ›  Andy Carlson

统计分组数据帧中找到的所有值

  •  1
  • Andy Carlson  · 技术社区  · 8 年前

    假设我有一些人口统计数据

    demographic.data <- data.frame(nation=c('us', 'us', 'us', 'us', 'us', 'china', 'china', 'china'),
                                   religion=c('christ', 'budhist', 'christ', 'jew', 'jew', 'christ', 'budhist', 'budhist'))
    
    #  nation religion
    #1     us   christ
    #2     us  budhist
    #3     us   christ
    #4     us      jew
    #5     us      jew
    #6  china   christ
    #7  china  budhist
    #8  china  budhist
    

    我想计算每个国家宗教的A质量函数。所以我 能够 做一些像 group_by() 然后由一群 sum() S.

    religion.distributions <- demographic.data %>%
      group_by(nation) %>%
      summarise(n       = n(),
                christ  = sum(religion == 'christ'),
                jew     = sum(religion == 'jew'),
                budhist = sum(religion == 'budhist'))
    
    #  nation     n christ   jew budhist
    #
    #1 china      3      1     0       2
    #2 us         5      2     2       1
    

    虽然这对这些数据产生了正确的结果,但问题是我必须硬编码我想总结的宗教。如果数据中出现任何新的宗教,这将是一个问题。

    有没有办法 自动 在每一组中,每种宗教的计数都有列吗?它应该能够查看 religion 列并开始计数。使用 dplyr 管道将是最优雅的。

    1 回复  |  直到 8 年前
        1
  •  1
  •   akrun    8 年前

    我们可以利用 spread 具有 count

    library(tidyverse)
    demographic.data %>% 
        group_by(nation) %>% 
        mutate(n = n()) %>% 
        count(nation, religion, n) %>% 
        spread(religion, nn, fill = 0)
    # A tibble: 2 x 5
    # Groups:   nation [2]
    #  nation     n budhist christ   jew
    #  <fct>  <int>   <dbl>  <dbl> <dbl>
    #1 china      3       2      1     0
    #2 us         5       1      2     2