【问题标题】:R dplyr: tally to create Panel DataR dplyr:创建面板数据的计数
【发布时间】:2020-03-18 09:58:24
【问题描述】:

我有以下数据框:

D <- data.frame("Id" = c("a","b","c","d","e","f","g"), "Group" = c("1","1","1","2","2","2","2"),"Time" = c("1","1","2","1","2","3","3"))

  Id Group Time
1  a     1    1
2  b     1    1
3  c     1    2
4  d     2    1
5  e     2    2
6  f     2    3
7  g     2    3

我想按周期和时间计算保持圆柱结构的个人数量。经典的方法是使用 dplyr

D %>% group_by(Group,Time) %>% tally()
  Group Time      n
  <fct> <fct> <int>
1 1     1         2
2 1     2         1
3 2     1         1
4 2     2         1
5 2     3         2

但结构不平衡:此处第 1 组未显示时间 3,但我希望看到它与 0 相关联,如下所示:

  Group Time      n
  <fct> <fct> <int>
1 1     1         2
2 1     2         1
3 1     3         0
4 2     1         1
5 2     2         1
6 2     3         2

有没有办法在 group_by 之后平衡结果?有人遇到过类似的事情吗? 在此先感谢

【问题讨论】:

    标签: r dplyr panel


    【解决方案1】:

    由于Time 是因子变量,我们可以将count.drop = FALSE 一起使用,因为默认情况下count 会以0 计数放弃观察。

    library(dplyr)
    D %>% count(Group, Time, .drop = FALSE)
    
    #  Group Time      n
    #  <fct> <fct> <int>
    #1 1     1         2
    #2 1     2         1
    #3 1     3         0
    #4 2     1         1
    #5 2     2         1
    #6 2     3         2
    

    我们也可以使用 tally 的相同方法。

    D %>% group_by(Group,Time, .drop = FALSE) %>% tally()
    

    complete

    D %>%  count(Group, Time) %>% tidyr::complete(Group, Time, fill = list(n = 0))
    

    【讨论】:

      【解决方案2】:

      Ronak Shah 答案的小替代方案:

      library(tidyr)
      library(dplyr)
      
      D <- data.frame("Id" = c("a","b","c","d","e","f","g"), "Group" = c("1","1","1","2","2","2","2"),"Time" = c("1","1","2","1","2","3","3"))
      
      D %>% 
        group_by(Group,Time) %>% 
        tally() %>% 
        ungroup() %>%
        complete(Group, Time)
      

      【讨论】:

        【解决方案3】:

        base R中,我们可以使用table

        as.data.frame(table(D[-1])) 
        

        【讨论】:

          猜你喜欢
          • 2016-09-15
          • 1970-01-01
          • 2015-05-13
          • 2014-01-27
          • 2015-08-02
          • 1970-01-01
          • 1970-01-01
          • 2017-10-16
          • 1970-01-01
          相关资源
          最近更新 更多