代码之家  ›  专栏  ›  技术社区  ›  Ric S

总结后突变-dpylr

  •  1
  • Ric S  · 技术社区  · 7 年前

    我有一个玩具数据框,如下所示

          Date Type Units
    2016-10-11    A    11
    2016-10-12    B    14
    2016-10-12    C    10
    2016-10-13    A     6
    2016-10-13    B     4
    2016-10-13    D     9
    2016-10-14    E     7
    2016-10-14    A    12
    2016-10-14    C    12
    2016-10-15    A    13
    2016-10-15    F    12
    2016-10-15    C     3
    2016-10-15    D     4
    
    df <- structure(list(Date = c("2016-10-11", "2016-10-12", "2016-10-12", 
    "2016-10-13", "2016-10-13", "2016-10-13", "2016-10-14", "2016-10-14", 
    "2016-10-14", "2016-10-15", "2016-10-15", "2016-10-15", "2016-10-15"
    ), Type = c("A", "B", "C", "A", "B", "D", "E", "A", "C", "A", 
    "F", "C", "D"), Units = c(11L, 14L, 10L, 6L, 4L, 9L, 7L, 12L, 
    12L, 13L, 12L, 3L, 4L)), class = "data.frame", row.names = c(NA, 
    -13L))
    

    我想:添加一个列,该列指示每个列中的类型数 Date 并和 Units 列分组依据 日期 . 输出数据集如下所示:

    Date       Units n_types
    <chr>      <int>   <dbl>
    2016-10-11    11       1
    2016-10-12    24       2
    2016-10-13    19       3
    2016-10-14    31       3
    2016-10-15    32       4
    

    不过,如果不是两个人的话,我也没能做到 mutate 功能,如下代码所示:

    df %>%
      group_by(Date) %>%
      mutate(n_types = n()) %>%
      summarise_if(is.numeric, sum) %>%
      mutate(n_types = sqrt(n_types)) %>%
      ungroup()
    

    注释 我用过 summarise_if 因为在我的原始数据集中,我有更多的数值变量,而不仅仅是 单位 ,所以我必须使用这个函数。还有其他方法可以添加 n_types 不使用两个的列 突变 功能?还是我的一个好方法?

    1 回复  |  直到 7 年前
        1
  •  2
  •   akrun    7 年前

    我们可以把 n_types 也在 group_by 然后做 summarise_if 删除一个附加步骤

    df %>% 
       group_by(Date) %>% 
       group_by(n_types = n(), add = TRUE) %>% 
       summarise_if(is.numeric, sum)
    # A tibble: 5 x 3
    # Groups:   Date [?]
    #  Date       n_types Units
    #  <chr>        <int> <int>
    #1 2016-10-11       1    11
    #2 2016-10-12       2    24
    #3 2016-10-13       3    19
    #4 2016-10-14       3    31
    #5 2016-10-15       4    32
    
    推荐文章