首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取每个项目的信息,学生按R中的学校分组

获取每个项目的信息,学生按R中的学校分组
EN

Stack Overflow用户
提问于 2019-02-21 22:29:34
回答 1查看 39关注 0票数 0

我的主要目标:我有一个由许多学生组成的数据框架,他们在一次测试中对45个项目的回答,以及45个项目中每一个项目的正确答案。有些学生来自同一所学校(我们有每个学校的ID )。

我需要的是得到谁回答问题的人的百分比,在每个学校,并为每个项目。

我能够分离向量,并为每个学生纠正测试,然后我就有了一个像图片中的0和1的数据帧(每一行都是一个学生)。

然后,我可以通过以下命令获得问题1所需的内容:

 escolas <- group_by(acertos, School_ID)
 percentual <- summarize(escolas, count = n(), P1 = (sum(Q1)/count)*100)

我可以输入其中的45行,改变问题引用,但我很确定有另一种方法可以做到这一点,但我无法解决这个问题。

可重复示例,20个学生,4个学校,5个项目:

Student_ID = c(1:20)
School_ID = c(rep(1,5),rep(2,5), rep(3,5), rep(4,5))

Q1 = 1*(runif(20) < 0.5)
Q2 = 1*(runif(20) < 0.5)
Q3 = 1*(runif(20) < 0.5)
Q4 = 1*(runif(20) < 0.5)
Q5 = 1*(runif(20) < 0.5)

data <- tibble(Student_ID, School_ID, Q1, Q2, Q3, Q4, Q5)
data
    Student_ID School_ID    Q1    Q2    Q3    Q4    Q5


           1         1     0     1     1     0     1
           2         1     0     0     1     1     0
           3         1     0     1     0     0     0
           4         1     0     0     0     0     1
           5         1     0     1     1     1     1
           6         2     0     0     1     0     1
           7         2     0     0     1     1     1
           8         2     1     1     1     0     0
           9         2     0     0     1     0     0
          10         2     1     1     1     1     1

我希望是这样的东西

        School_ID    Q1     Q2   Q3    Q4     Q5


           1         70%   50%   30%   20%   40%   
           2         60%   40%   20%   10%   30%      

含义:

考虑到学校1的所有学生(只有他们),70%的人Q1答对了。

考虑到学校2的所有学生(只有他们),30%的人Q5正确,以此类推。适用于所有学校和所有项目。

我希望这能让你更容易尝试并更好地理解挑战。

EN

回答 1

Stack Overflow用户

发布于 2019-02-21 22:40:43

所以我尝试按如下方式复制你的数据帧:

N = 200
data <- tibble(
  School_ID = 1:N,
  Q1 = 1*(runif(N) < 0.5),
  Q2 = 1*(runif(N) < 0.5),
  Q3 = 1*(runif(N) < 0.5),
  Q4 = 1*(runif(N) < 0.5),
  Q5 = 1*(runif(N) < 0.5),
)

接下来,您可以使用tidyr或真正导入tidyverse,如下所示:

# this
library(tidyverse)
# or  this
library(tidyr)

data %>% 
  group_by(School_ID) %>% 
  gather(
    `Question ID`,
    Score,
    -School_ID
  ) %>% 
  group_by(School_ID, `Question ID`) %>% 
  summarise(
    Proportion = mean(Score)
  )

解释:首先,我将矩阵展平,以便在聚集线之后,您将有一个包含三列的表: School_ID、问题ID和分数。然后,我按学校id和问题id分组,并应用转换。

Bonus:您添加了一个“分散”语句来再次转置您的数据,这样您就可以将每个问题放在它自己的列中(请参阅下面的最后三行)。

data %>% 
  group_by(School_ID) %>% 
  gather(
    `Question ID`,
    Score,
    -School_ID
  ) %>% 
  group_by(School_ID, `Question ID`) %>% 
  summarise(
    Proportion = mean(Score)
  ) %>% 
  spread(
    `Question ID`,
    Proportion
  )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54809439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档