Мне нужно создать некоторые неортодоксальные фиктивные переменные, и у меня возникли проблемы. По существу в моем наборе данных каждый преподаватель может преподавать несколько классов. Я создаю многоуровневый набор данных, поэтому вполне нормально, что есть дубликаты идентификаторов учителей.Создание неортодоксальной фиктивной переменной
Вот пример данных:
#generate data
teacher.id <- c(1:5, 1:5)
class.taught <- c("ELA", "Math", "Science", "ELA", "Math", "Science", "Math", "ELA", "ELA", "Math")
# combine into data frame
dat <- data.frame(teacher.id, class.taught)
Как вы можете видеть учителей с идентификаторами 1 и 3 и преподающих 2 разных классов.
Традиционный подход к созданию выходов фиктивных переменных:
# example of what I have done so far
dat$teach.ELA <- ifelse(dat$class.taught == "ELA", 1, 0)
dat$teach.MATH <- ifelse(dat$class.taught == "Math", 1, 0)
dat$teach.SCIENCE <- ifelse(dat$class.taught == "Science", 1, 0)
dat
Однако здесь, как я хотел бы, чтобы новые фиктивные переменные посмотреть:
desired.ELA <- c(1,0,1,1,0,1,0,1,1,0)
desired.MATH <- c(0,1,0,0,1,0,1,0,0,1)
desired.SCIENCE <- c(1,0,1,0,0,1,0,1,0,0)
dat.2 <- data.frame(dat, desired.ELA, desired.MATH, desired.SCIENCE)
dat.2
Подозреваю, что мне нужно цикл через иды, чтобы создать их, но прошлое, что я действительно не вижу, чтобы мой путь мог выполнить то, что я желаю.
Не 'data.frame (cbind (x, y))', поскольку cbind даст вам матрицу символов – Frank
Есть ли какое-то правило для «желаемого». множество переменных? – lmo
Я подозреваю, что это как 'для (crs в уровнях (dat $ class)), что [crs] <- ave (dat $ class, dat $ teacher, FUN = function (x) crs% in% x)', но, к сожалению, ave' не сотрудничает. Вы можете сделать «для (col in c (« learn.ELA »,« learn.MATH »,« learn.SCIENCE »)), что [col] <- ave (dat [col], dat $ teacher, FUN = max) 'после вашего« обычного »кода, но он довольно длинный. – Frank