首页 > 解决方案 > 按列值在 R 中出现的概率对数据进行分组

问题描述

我有具有以下结构的数据:

  month         Responder       Status  Frequency
  2020-02-01    A                 TRUE  1
  2020-03-01    B                FALSE  1
  2020-03-01    B                 TRUE  2
  2020-03-01    C                FALSE  1
  2020-03-01    C                 TRUE  1
  2020-03-01    D                FALSE  1
  2020-03-01    E                FALSE  1
  2020-03-01    F                FALSE  2
  2020-03-01    G                FALSE  1
  2020-03-01    G                 TRUE  2
  2020-03-01    H                 TRUE  1

我现在想创建一个数据框,显示每个响应者状态为 FALSE 的概率,按月份分组。因此,输出应如下所示,其中 n 是当月列出响应者的次数:

  month         Responder         n    prob_false
  2020-02-01    A                 1    0
  2020-03-01    B                 2    0.333
  2020-03-01    C                 2    0.5
  2020-03-01    D                 1    1
  2020-03-01    E                 1    1
  2020-03-01    F                 1    1
  2020-03-01    G                 2    0.333
  2020-03-01    H                 1    0

标签: rdplyr

解决方案


使用dplyr并基于@akrun 非常有用的评论:

df1 %>% 
  group_by(Responder, month) %>% 
  summarise(n = n(), prob_false = sum(Frequency[!Status])/sum(Frequency))

# A tibble: 8 x 4
# Groups:   Responder [8]
  Responder month          n prob_false
  <chr>     <chr>      <int>      <dbl>
1 A         2020-02-01     1      0    
2 B         2020-03-01     2      0.333
3 C         2020-03-01     2      0.5  
4 D         2020-03-01     1      1    
5 E         2020-03-01     1      1    
6 F         2020-03-01     1      1    
7 G         2020-03-01     2      0.333
8 H         2020-03-01     1      0    

推荐阅读