作业1参考答案

  1. 以”cepsw2studentCN.dta“为源生成一个新的数据,满足以下条件:
    a.包含以下信息:学生id,w2班级代码,学校id, 认知能力原始得分,数学期中成绩, 英语期中成绩,父母关系好坏情况,父母的教育期望,好朋友的数量, 参加兴趣班/课外辅导班的情况;
    f.将好朋友数量的变量命名为nfriend, 父母期望命名为expectation;
    b.将父母好坏情况和父母教育期期望的变量放置在学校id后面;
    d.选择出数学和英语成绩都是实行150分制的学生;
    c.删除以上变量具有缺失值的个体;
    e.按认知能力降序排列;
    g.生成新变量表示学生英语和数学的加和;
library(tidyverse)
library(rio)
library(here) # 仅是quarto文档中需要使用here()命令打开、保存文件
std <- import(here("files/data/cepsw2studentCN.dta"))

std2 <- std %>% filter(w2upmat==150 & w2upeng==150) %>% 
  select(ids, w2clsids,schids, w2cogscore,w2mat,w2eng,w2a17,w2a28, w2d09,w2b1100) %>% 
  rename(nfriend=w2d09,expectation=w2a28) %>% 
  relocate(w2a17,expectation,.after = schids) %>% 
  drop_na() %>% 
  arrange(w2cogscore) %>% 
  mutate(sum=w2eng+w2mat)

export(std2,here("assignments/answers/yeyangyong_1Q1.dta"))
  1. 以上题数据为基础,生成一个新的数据,包含每所学校的数学平均成绩和英语平均成绩。
std3 <- std2 %>% 
  group_by(schids) %>% 
  summarise(mean_mat=mean(w2mat),
            mean_eng=mean(w2eng))

export(std3,here("assignments/answers/yeyangyong_1Q2.dta"))
  1. 以数据”cepsw2teacherCN.dta“为基础,生成一个只包括数学老师信息的数据,并将此数据与第1题中的数据合并生成一个新的数据。
tch <- import(here("files/data/cepsw2teacherCN.dta"))
tch2 <- tch %>% 
  filter(w2tchsubject==1) %>% 
  select(-schids)

std_cls <- std2 %>% 
  left_join(tch2,by="w2clsids")

export(std_cls,here("assignments/answers/yeyangyong_1Q3.dta"))
  1. 使用第1题的数据,将学生参与兴趣班的多个变量变成一个变量,取值变成另外一个变量,即将一个wide的数据变成long数据,并计算出每位学生参加兴趣班的数量总和。
interest <- std %>% 
  select(ids, w2b1101:w2b1111) %>% 
  pivot_longer(w2b1101:w2b1111,names_to = 'type',values_to = "amount") %>% 
  drop_na() %>% 
  group_by(ids) %>% 
  summarise(sum=sum(amount))

export(interest,here("assignments/answers/yeyangyong_1Q4.dta"))