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



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

我有一个数据帧,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变量对数据进行分组,然后计算各组中CorrectOutcome值的比例(即%.Correct=组中正确结果的数量/组中观察的数量(。例如,我想要的输出如下:

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

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

我能够通过改编上一篇文章中的脚本来解决这个问题:dplyr 的相对频率/比例

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

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

但由于我只对每组中CorrectOutcome值的频率感兴趣,我们只对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的观测值。

最新更新