【问题标题】:Group by and summarise number of boolean values of a column corresponding to each unique value of another column on a specific date按特定日期分组并汇总与另一列的每个唯一值相对应的列的布尔值数量
【发布时间】:2021-02-22 20:04:27
【问题描述】:

我有以下数据框:

library(tidyverse)
library(tibble)
data_frame <-
  tribble(
    ~id,     ~date,                       ~boolean_value,
    "1",     as.Date("2020-01-01"),       TRUE,
    "2",     as.Date("2020-01-02"),       TRUE,
    "2",     as.Date("2020-01-02"),       TRUE,
    "3",     as.Date("2020-01-02"),       TRUE,
    "3",     as.Date("2020-01-03"),       FALSE
  )

我希望能够按date 列进行分组,并按唯一ID 的数量以及与id 的每个唯一出现对应的布尔值的总和进行汇总。但是,当我运行以下代码时,它会给出与每个 date 对应的 boolean_value 的总和。

data_frame %>% 
  group_by(date) %>% 
  summarise(
    total_ids = n_distinct(id),
    total_true_values = sum(boolean_value)
  )
#> `summarise()` ungrouping output (override with `.groups` argument)
#> # A tibble: 3 x 3
#>   date       total_ids total_true_values
#>   <date>         <int>             <int>
#> 1 2020-01-01         1                 1
#> 2 2020-01-02         1                 3
#> 3 2020-01-03         1                 0 

相反,我想知道TRUE 在该日期每个唯一出现的id 值的数量。我期待以下结果:

 #> # A tibble: 3 x 3
    #>   date       total_ids total_true_values
    #>   <date>         <int>             <int>
    #> 1 2020-01-01         1                 1
    #> 2 2020-01-02         2                 2
    #> 3 2020-01-03         1                 0 

如何使用 dplyr/tidyverse 实现这一目标?谢谢!

【问题讨论】:

    标签: r dplyr tidyverse


    【解决方案1】:

    我们可以根据逻辑向量对“id”进行子集化,得到n_distinct

    library(dplyr)
    data_frame %>% 
       group_by(date) %>% 
       summarise(total_ids =n_distinct(id), 
                  total_true_values = n_distinct(id[boolean_value]))
    

    -输出

    # A tibble: 3 x 3
    #  date       total_ids total_true_values
    #  <date>         <int>             <int>
    #1 2020-01-01         1                 1
    #2 2020-01-02         2                 2
    #3 2020-01-03         1                 0
    

    【讨论】:

    • @akun 如果我有另一个 id,可以说 2020-01-02 上的 id 4 也有一个 TRUE 布尔值,您的代码将只显示 1 的值true_values 代表 2020-0-01,而我希望该日期的 true_values 等于 2,因为在该日期有 2 个 TRUE 值对应于 2 个不同的 id。我该如何计算?感谢您的帮助!
    • @UsmanKhaliq 对于total_ids,第二行不是2吗?
    • 抱歉,是 2,我现在更新了数据集。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多