2015-11-05 2 views
0

У меня есть большие наборы данных со следующими переменнымиВыделяя значение переменной, если условие выполняется в data.table

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 (1, если да, 0, если нет) за любой год.

Как только это будет сделано, я буду рассматривать подмножество на уровне ученика и года.

ответ

2

Для создания двух столбцов, сгруппированных по 'student_ID', нам нужно назначить (:=) вывод (и двоичный вывод) на новые имена столбцов.

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)] 
+0

мой менеджер просто изменил параметры моей задачи. хочет посмотреть, изменились ли изменения в годовом исчислении (см. выше правки) – monkeyshines

+0

@MonikaSarder Можете ли вы показать ожидаемый результат, поскольку неясно, что вы имели в виду при изменении статуса. Похоже, если один идентификатор ученика 1 имеет значение <50, а следующий также <50, это 0, если третий изменяется с> 50, 1? – akrun

+0

Я буду использовать модель коррекции beckman для того, какие факторы влияют на то, имеет ли студент (скажем, инженерная когорта 2014 года), у которого <50 в 2014 году будет <50 в 2015 году. Каждый ученик_ID будет иметь несколько летних строк (2010, 2011,2012 и т. д.) и одно значение (1 или 0) для их среднего в этом году. скажем, в SQL student_id, и Year будет первичным ключом, если это имеет смысл. – monkeyshines