如果data.table

时间:2015-11-05 06:08:42

标签: r conditional data.table mean

我有一个包含以下变量的大数据集

student_ID=c(rep("1001",8),rep("1002",3),rep("1003",11))
grades=c(NA,rep(40,2),50,60,90, 5,NA,51, rep(47,5),rep(70,5),rep(42,3))
Year=c(rep(2011,4),rep(2012,4),2011,2012,2013,rep(2011,4),rep(2012,3),rep(2013,4))
data<-data.table(student_ID,grades,Year)
setkey(data, student_ID)

我需要创建两个新变量。一个由学生平均成绩。一个是关于任何给定年份的平均成绩是否<50(如果是,则为0,如果没有)。

一旦完成,我将查看学生和年级的子集。

1 个答案:

答案 0 :(得分:2)

要创建按&#39; student_ID&#39;分组的两列,我们需要将输出(:=和二进制输出)分配(mean(grades))到新列名称。

data[, c('MeanGrade', 'MeanGradelessthan50') :={tmp <- mean(grades, na.rm=TRUE)
                                  list(tmp, +(tmp < 50))}, by = student_ID]

如果我们需要总结而不是分配,请使用list

data[, {tmp <- mean(grades, na.rm=TRUE)
     list(MeanGrade=tmp, MeanGradelessthan50 = +(tmp < 50))}, by = .(student_ID, Year)]