我正在查看个别学生级别的学生数据集。
我想做的是在教师学位层面做一些描述性分析。
这是一些学生正在攻读两个学位(双学位,如信息技术学士学位和理学士学位),所以有些学生可以获得两个学位。
我的数据如下所示。教师任务(无论是FAC1还是FAC2)是任意的。
studid FAC1 FAC2 SUCCESS SEX AVE_MARK
1 IT ARTS 0 Male 65
2 SCIENCE 1 Male 35
3 LAW 0 Male 98
4 IT SCIENCE 0 Female 55
5 COMMERCE IT 0 Female 20
6 COMMERCE IT 1 Male 80
这是用
生成的students<-data.table(studid=c(1:6) ,FAC1 = c("IT","SCIENCE", "LAW","IT","COMMERCE","COMMERCE"), FAC2 = c("ARTS","","","SCIENCE","IT","IT"), SUCCESS = c(0,1,0,0,0,1), SEX=c("Male","Male","Male","Female","Female","Male"), AVE_MARK=c(65,35,98,55,20,80))
我如何制作这样的(制作数字)来创建包含FAC1和FAC2列的Faculty列?我一直在尝试使用FAC1和FAC2之间的lapply函数,但是仍然达到死胡同(即学生[,lapply(.SD,mean),= agg.by,.SDcols = c(&#39; FAC1&#39; ,&#39; FAC2&#39;)]
FACULTY MEAN_SUCCESS AVE_MARK
IT 0.65 65
SCIENCE 1 50
LAW 0.76 50
ARTS 0.55 50
COMMERCE 0.40 10
非常感谢任何帮助。
答案 0 :(得分:2)
这似乎就是你要找的东西。
library(reshape2)
DT <- melt(students,measure.vars=c("FAC1","FAC2"),value.name="FACULTY")[nchar(FACULTY)>0]
DT[,list(mean_success=mean(SUCCESS),ave_mark=mean(AVE_MARK)),by=FACULTY]
# FACULTY mean_success ave_mark
# 1: IT 0.25 55
# 2: SCIENCE 0.50 45
# 3: LAW 0.00 98
# 4: COMMERCE 0.50 50
# 5: ARTS 0.00 65
因此,这会使用包melt(...)
中的reshape2
函数来折叠两个教师列,复制所有其他列。不幸的是,这导致一些列具有空白的教师,因此我们必须摆脱使用[nchar(FACULTY)>0]
的列。然后根据(新)FACULTY
列进行聚合很简单。