Если вы хотите, чтобы все было очень просто, то изменение формы в базе R было бы наиболее эффективным.Я просто сделал бы матрицу из внешнего вида, привел бы ее к типу data.frame и назвал бы столбцы.
newDF <- data.frame( matrix(oldDF$appearance, ncol = 4, byrow = TRUE) )
names(newDF) <- oldDF$course[1:4]
Теперь, если у вас нет фрейма, отсортированного так же, как выпредставил его и, возможно, даже имеет больше значений в столбце курса, следующее более надежно ...
oldDF <- oldDF[ order(oldDF$course), ]
s <- sort(unique(oldDF$course))
newDF <- data.frame( matrix(oldDF$appearance, ncol = length(s)) )
names(newDF) <- s
(вы можете добавить другие столбцы в функцию заказа, чтобы разорвать связи, если хотите)
Одним из больших преимуществ многих команд, которые можно использовать для изменения формы данных, является то, что они устойчивы к порядку данных, отсутствующим ячейкам и т. Д. Однако это также делает их, как правило, довольно медленными, когда выполучил прямое изменение формы для очень большого объекта data.frame.