将计算应用于按类别变量分组的数据框

问题描述 投票:0回答:1

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

我有一个数据框,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_by中的dplyr,但不确定如何将手动计算应用于每个组以产生所需的结果。

r dplyr grouping
1个回答
0
投票

我能够通过改编以前的文章中的脚本来解决此问题:Relative frequencies / proportions with dplyr

dplyr的使用将为每个Outcome组中的每个Conf.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的观测值包括在内。

© www.soinside.com 2019 - 2024. All rights reserved.