首页 > 解决方案 > 将计算应用于按分类变量分组的数据框

问题描述

可能是重复的,但我一直无法找到这个问题的简单实例。

我有一个数据框,DF

     Event ID Objective.Bi Subjective.Bi Confidence   Outcome Conf.Bin
1         1            0             0         80   Correct    80-89
2         2            0             1         50 Incorrect    50-59
3         3            0             1         60 Incorrect    60-69
4         4           NA             0         80      <NA>    80-89
5         5            0             1         30 Incorrect    30-39
6         6            0             0         60   Correct    60-69
7         7            1             0         80 Incorrect    80-89
8         8            0             0         10   Correct    10-19
9         9            1             0         10 Incorrect    10-19
10       10            0             0         50   Correct    50-59
11       11            1             1         90   Correct   90-100
12       12            0             1         50 Incorrect    50-59
13       13            1             0         80 Incorrect    80-89
14       14            0             0         50   Correct    50-59
15       15            1             1         10   Correct    10-19
16       16            1             1         20   Correct    20-29
17       17            1             0         80 Incorrect    80-89
18       18            1             1         50   Correct    50-59
19       19            1             1         20   Correct    20-29
20       20            1             1         99   Correct   90-100
21       21            1             0         90 Incorrect   90-100
22       22            0             0         90   Correct   90-100
23       23           NA             1         10      <NA>    10-19
24       24            1             0         20 Incorrect    20-29
25       25            0             0         80   Correct    80-89
26       26            0             0         80   Correct    80-89
27       27            0             0         50   Correct    50-59
28       28            0             0         50   Correct    50-59
29       29           NA             1         60      <NA>    60-69
30       30            1             1         70   Correct    70-79

我想按Conf.Bin变量对数据进行分组,然后计算Correct Outcome每组中值的比例(即%.Correct=组中正确结果的数量/组中的观察次数)。例如,我想要的输出如下所示:

   Conf.Bin  %.Correct
1     10-19       50.0
2     20-29       66.7
3     30-39       00.0
...

最简单的方法是什么?我过去使用group_bydplyr,但不确定如何将此手动计算应用于每个组以产生所需的结果。

标签: rdplyrgrouping

解决方案


我可以通过调整上一篇文章中的脚本来解决这个问题:Relative frequency / ratios with dplyr

这种使用为每组中的每个dplyr生成一个具有相对频率的数据帧:OutcomeConf.Bin

DF.Correct<- as.data.frame(DF %>% 
  group_by(Conf.Bin, Outcome) %>%
  summarise(n = n()) %>%
  mutate(freq = n/ sum(n)))

head(DF.Correct)
#  Conf.Bin   Outcome n      freq
#1    10-19      <NA> 1 0.2500000
#2    10-19   Correct 2 0.5000000
#3    10-19 Incorrect 1 0.2500000
#4    20-29   Correct 2 0.6666667
#5    20-29 Incorrect 1 0.3333333
#6    30-39 Incorrect 1 1.0000000

但由于我只对Correct Outcome每个组中值的频率感兴趣,我们只是子集DF.Correct

DF.Correct <- filter(DF.Correct, Outcome == "Correct")

head(DF.Correct)
#  Conf.Bin Outcome n      freq
#1    10-19 Correct 2 0.5000000
#2    20-29 Correct 2 0.6666667
#3    50-59 Correct 5 0.7142857
#4    60-69 Correct 1 0.3333333
#5    70-79 Correct 1 1.0000000
#6    80-89 Correct 3 0.4285714

NA注意:我在这里的相对频率计算中包括了观察。


推荐阅读