【问题标题】:How do I count the numbers of occurrences for each group in a tidy data.table? [duplicate]如何计算整齐的 data.table 中每个组的出现次数? [复制]
【发布时间】:2021-01-15 12:11:50
【问题描述】:

我想在一个整洁的 data.table 中计算每个组有多少个 TRUE 标记:

DT <- data.table(      id = c(1   ,1    ,1    ,2   ,2    ,2   ,2   ,2    )
                 , marker = c(TRUE,FALSE,FALSE,TRUE,FALSE,TRUE,TRUE,FALSE))

所以我尝试了DT[marker==TRUE, num_markers := .N, by = id],输出:

   id marker num_markers
1:  1   TRUE           1
2:  1  FALSE          NA
3:  1  FALSE          NA
4:  2   TRUE           3
5:  2  FALSE          NA
6:  2   TRUE           3
7:  2   TRUE           3
8:  2  FALSE          NA

相反,所需的输出是:

   id marker num_markers
1:  1   TRUE           1
2:  1  FALSE           1
3:  1  FALSE           1
4:  2   TRUE           3
5:  2  FALSE           3
6:  2   TRUE           3
7:  2   TRUE           3
8:  2  FALSE           3

如何调整代码以获得所需的输出(删除每个 id 的 NA 并完成标记的组数?)

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    也许在标记列上使用 sum

    DT[, num_markers := sum(marker), by = id ][]
    
    #    id marker num_markers
    # 1:  1   TRUE           1
    # 2:  1  FALSE           1
    # 3:  1  FALSE           1
    # 4:  2   TRUE           3
    # 5:  2  FALSE           3
    # 6:  2   TRUE           3
    # 7:  2   TRUE           3
    # 8:  2  FALSE           3
    

    【讨论】:

      【解决方案2】:
      DT[, num_markers := (.SD[marker, .N]), by = id]
      

      给出:

      > DT
         id marker num_markers
      1:  1   TRUE           1
      2:  1  FALSE           1
      3:  1  FALSE           1
      4:  2   TRUE           3
      5:  2  FALSE           3
      6:  2   TRUE           3
      7:  2   TRUE           3
      8:  2  FALSE           3
      

      【讨论】:

        【解决方案3】:

        另一个使用ave的选项

        DT[, num_markers := ave(marker,id,FUN = sum)]
        

        给了

        > DT
           id marker num_markers
        1:  1   TRUE           1
        2:  1  FALSE           1
        3:  1  FALSE           1
        4:  2   TRUE           3
        5:  2  FALSE           3
        6:  2   TRUE           3
        7:  2   TRUE           3
        8:  2  FALSE           3
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-07-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-09-30
          相关资源
          最近更新 更多