R 用数据表将学校成绩制成表格(从长表格到宽表格)
我有一个带有年级和学生id的大型课程数据库。它看起来像这样(为了简化,删除了更多变量): 我需要将那个大文件转换成一个文件,每个学生都有自己的一行,其中包含所有不同课程的成绩。更像这样:R 用数据表将学校成绩制成表格(从长表格到宽表格),r,data.table,R,Data.table,我有一个带有年级和学生id的大型课程数据库。它看起来像这样(为了简化,删除了更多变量): 我需要将那个大文件转换成一个文件,每个学生都有自己的一行,其中包含所有不同课程的成绩。更像这样: studentID chemistry math english ---------------------------------------- 1 86 NA NA 2 85 72 NA
studentID chemistry math english
----------------------------------------
1 86 NA NA
2 85 72 NA
3 NA 90 52
student.files <- course.db[, .(
average=mean(grade, na.rm=T) #more vars are created here
), by="studentID"]
以下是创建我的采样器数据库的代码:
course.db <- data.table(
studentID=c("1", "2", "2", "3", "3"),
course=c("chemistry", "chemistry", "math", "english", "math"),
grade=c(86, 85, 72, 52, 90)
)
course.db谢谢你,休伯特。我没有注意到有data.table版本(我的数据库非常大,所以只要有可能,我就需要留在data.table中)。下面是一个使用dcast for data.table的有效解决方案:
dcast.data.table(course.db, studentID~course, value.var="grade" )
注释中指出:只要表已经是data.table对象,简单的dcast也可以工作并使用data.table方法:
dcast(course.db, studentID~course, value.var="grade" )
结果:
studentID chemistry english math
1: 1 86 NA NA
2: 2 85 NA 72
3: 3 NA 52 90
最新版本的data.table
不需要调用dcast.data.table
,只要course.db
已经是data.table
,就可以使用dcast
。
dcast.data.table(course.db, studentID~course, value.var="grade" )
dcast(course.db, studentID~course, value.var="grade" )
studentID chemistry english math
1: 1 86 NA NA
2: 2 85 NA 72
3: 3 NA 52 90