R 用数据表将学校成绩制成表格(从长表格到宽表格)

R 用数据表将学校成绩制成表格(从长表格到宽表格),r,data.table,R,Data.table,我有一个带有年级和学生id的大型课程数据库。它看起来像这样(为了简化,删除了更多变量): 我需要将那个大文件转换成一个文件,每个学生都有自己的一行,其中包含所有不同课程的成绩。更像这样: studentID chemistry math english ---------------------------------------- 1 86 NA NA 2 85 72 NA

我有一个带有年级和学生id的大型课程数据库。它看起来像这样(为了简化,删除了更多变量):

我需要将那个大文件转换成一个文件,每个学生都有自己的一行,其中包含所有不同课程的成绩。更像这样:

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