и заблаговременно за вашу помощь. Я очень новичок в R, и у меня проблемы с кодом, который мне кажется, что он должен работать, но это не так. У меня есть кадр данных, как показано ниже:R - создайте новые векторы на основе элементов существующего вектора
studentID classNumber classRating
7 1 4
7 2 4
7 4 3
79 1 5
79 2 3
116 1 5
116 2 4
134 1 5
134 3 5
134 4 5
И я хочу, чтобы читать, как это:
Student ID class1 class2 class3 class4
7 4 4 NA 3
79 5 3 NA NA
116 5 4 NA NA
134 5 NA 5 5
Я попытался собрать воедино разные вещи, которые я сталкивался, и это казалось наилучшим подходом было создать новый кадр данных и матрицу, а затем заполнить его из текущего кадра данных. Я пришел с разбитым код ниже:
classRatings = data.frame(matrix(NA,4,5))
for(i in 1:nrow(classDB)){
#Find ratings by each student
rowsToReplace = classDB$studentID==classRatings$studentID[i]
#Make a row for each unique studentID in classRatings
classDB$studentID[rowsToReplace] = classRatings$studentID[i]
#for each studentID, find put the given rating for each unique class into
#it's own vector
for(j in classDB$classNumber){
if(classDB$classNumber==1){classRatings$class1==classDB$classRating}[j]
if(classDB$classNumber==2){classRatings$class2==classDB$classRating}[j]
if(classDB$classNumber==3){classRatings$class3==classDB$classRating}[j]
if(classDB$classNumber==4){classRatings$class4==classDB$classRating}[j]
if(classDB$classNumber==5){classRatings$class5==classDB$classRating}[j]
}
}
Я получаю сообщение об ошибке, которая говорит:
условие имеет длину> 1 и только первый элемент будет использоваться
, и я не в своем уме, чтобы понять это. Любая помощь приветствуется.
Попробуйте 'dcast (ДФ, studentID ~ classNumber, value.var = 'classRating')' 'из библиотеки (reshape2) ' – akrun
Вы также должны прочитать файл справки для' ifelse' (векторизован) и понять, как он отличается от 'if (cond) expr1 else expr2' (без векторизации). – nrussell
'reshape' заставляет вас закрыть:' reshape (dat, v.names = "classRating", idvar = "studentID", timevar = "classNumber", direction = "wide") ' – user20650