分组数据汇总组

时间:2019-07-19 16:47:40

标签: r

我正在尝试根据DataCamp课程提供的示例分析一些数据。但是,我认为他们在Datacamp上跳过了一些步骤,并且遇到了一些问题。 特别是,在他们提供的示例中,他们有一个名为MedGPA的数据集,如下所示:

  Accept Acceptance Sex BCPM  GPA VR PS WS BS MCAT Apps
1       D          0   F 3.59 3.62 11  9  9  9   38    5
2       A          1   M 3.75 3.84 12 13  8 12   45    3
3       A          1   F 3.24 3.23  9 10  5  9   33   19
4       A          1   F 3.74 3.69 12 11  7 10   40    5
5       A          1   F 3.53 3.38  9 11  4 11   35   11
6       A          1   M 3.59 3.72 10  9  7 10   36    5
7       A          1   M 3.85 3.89 11 12  6 11   40    5
8       D          0   M 3.26 3.34 11 11  8  9   39    7
9       A          1   F 3.74 3.71  8 10  6 11   35    5
10      A          1   F 3.86 3.89  9  9  6 10   34   11
11      A          1   F 4.00 3.97 11  9  8 11   39    6
12      A          1   F 3.35 3.49 11  8  4  8   31    9
13      A          1   M 3.77 3.77  8 10  7 10   35    5
14      D          0   M 3.60 3.61  9  9  4 10   32    8
15      D          0   M 3.29 3.30 11  8  6  7   32   15
16      A          1   F 3.26 3.54 12  8  8 10   38    6
17      D          0   M 3.75 3.65  8  8  8 11   35    6
18      A          1   M 3.51 3.54  9 10  9 11   39    1
19      D          0   M 3.27 3.25  8  9  5 10   32    5
20      A          1   M 3.95 3.89 13 14  8 13   48    5

然后,他们说您应该对数据进行分箱,并对分箱后的数据集进行一些分析。

它们提供合并的数据集,它看起来像这样:

> MedGPA_binned
# A tibble: 6 x 3
  bin         mean_GPA acceptance_rate
  <fct>          <dbl>           <dbl>
1 [2.72,3.3]      3.11           0.2  
2 (3.3,3.44]      3.39           0.2  
3 (3.44,3.58]     3.54           0.75 
4 (3.58,3.7]      3.65           0.333
5 (3.7,3.87]      3.79           0.889
6 (3.87,3.97]     3.91           1

GPA预测学生是否会被录取(接受率)的地方。

如何从第一个数据集到第二个数据集?

在我的数据集中,我对问题(连续变量)有一系列答案,我要预测的变量是CorrectGuess。该变量只有两个可能的结果:0 =正确的猜测,1 =错误的猜测。

我尝试了我的数据集:

data$bins2 = cut(data$Q15_1, breaks = 4, labels = c("Level1", "Level2", "Level3","Level4"))

这会向我的数据集添加一个名为bins2的列,看起来像

level2
leve1
leve3
level1 

以此类推...

我还尝试了另一种方式:

# Creating bins
# set up boundaries for intervals/bins
breaks <- c(0,20,40,60,80,100)
# specify interval/bin labels
labels <- c("<20", "20-40", "40-60", "60-80", "80-100")
# bucketing data points into bins
bins <- cut(data$Q15_1, breaks, include.lowest = T, right=FALSE, labels=labels)
# inspect bins
summary(bins)
plot(bins, main="Frequency", ylab="Ppt Answer Rating",col="bisque")

这会创建一个名为bins的变量,但看起来仍然不符合我的需求。

我该如何创建带有二进制数据的数据集以及每个BIN的正确猜测的概率?

2 个答案:

答案 0 :(得分:2)

对我而言,在执行回归之前对数据进行装箱并没有多大意义,您只是丢掉了信息,可能会使分析失真。

但是无论如何,我相信您正在使用aggregate()

这样的东西
tt <- read.table(text="
  Accept Acceptance Sex BCPM  GPA VR PS WS BS MCAT Apps
1       D          0   F 3.59 3.62 11  9  9  9   38    5
2       A          1   M 3.75 3.84 12 13  8 12   45    3
3       A          1   F 3.24 3.23  9 10  5  9   33   19
4       A          1   F 3.74 3.69 12 11  7 10   40    5
5       A          1   F 3.53 3.38  9 11  4 11   35   11
6       A          1   M 3.59 3.72 10  9  7 10   36    5
7       A          1   M 3.85 3.89 11 12  6 11   40    5
8       D          0   M 3.26 3.34 11 11  8  9   39    7
9       A          1   F 3.74 3.71  8 10  6 11   35    5
10      A          1   F 3.86 3.89  9  9  6 10   34   11
11      A          1   F 4.00 3.97 11  9  8 11   39    6
12      A          1   F 3.35 3.49 11  8  4  8   31    9
13      A          1   M 3.77 3.77  8 10  7 10   35    5
14      D          0   M 3.60 3.61  9  9  4 10   32    8
15      D          0   M 3.29 3.30 11  8  6  7   32   15
16      A          1   F 3.26 3.54 12  8  8 10   38    6
17      D          0   M 3.75 3.65  8  8  8 11   35    6
18      A          1   M 3.51 3.54  9 10  9 11   39    1
19      D          0   M 3.27 3.25  8  9  5 10   32    5
20      A          1   M 3.95 3.89 13 14  8 13   48    5", header=TRUE)

tt$BCPMd = cut(tt$BCPM, breaks=4, labels=c("L1", "L2", "L3","L4"))
aggregate(cbind(GPA, Acceptance) ~ BCPMd, data=tt, mean)
#   BCPMd      GPA Acceptance
# 1    L1 3.358333        0.5
# 2    L2 3.574000        0.6
# 3    L3 3.732000        0.8
# 4    L4 3.910000        1.0

答案 1 :(得分:0)

上面的答案很好。您还可以使用dplyr语法通过group_bysummarise函数来完成所需的操作。

  library(dplyr)

  df %>% group_by(bin = cut(GPA, breaks = c(2.72, 3.3, 3.44, 3.58, 3.7, 3.87, 3.97))) %>%
  summarise(mean = mean(GPA), acceptance_rate = sum(Acceptance) / length(Acceptance)) 

使用df是您的数据集

 bin          mean acceptance_rate
  <fct>       <dbl>           <dbl>
1 (2.72,3.3]   3.26           0.333
2 (3.3,3.44]   3.36           0.5  
3 (3.44,3.58]  3.52           1    
4 (3.58,3.7]   3.64           0.25 
5 (3.7,3.87]   3.76           1    
6 (3.87,3.97]  3.91           1