Анализ данных ранжирования LimeSurvey в R

Я использовал LimeSurvey для сбора информации о ранжировании 8 вариантов среди большого класса студентов. Я экспортировал результаты в формате CSV, и я получаю что-то вроде следующего...

Team1 Option7 Option4 Option6 Option1 Option2 Option3 Option5 Option8
Team2 Option4 Option3 Option1 Option2 Option7 Option8 Option6 Option5
...

... где рейтинг идет от низшего к высшему (например, Team1 наиболее предпочтительный вариант 7). Я пытаюсь превратить это во что-то вроде...

Option1 Option2 Option3 Option4 Option5 Option6 Option7 Option8
4       5       6       2       7       3       1       8
3       4       2       1       8       7       5       6
...

... как можно более похожим на R (например, избегая вложенных циклов for и т.п.). Моя конечная цель — сгенерировать гистограммы для каждого варианта, показывающие, как часто за них проголосовали первым, вторым и т. д. У меня есть подозрение, что reshape и тому подобное могут помочь, но необходимость использовать информацию о «позиции» сбивает меня с толку.

Любая помощь с благодарностью!


person Jason Foster    schedule 07.03.2012    source источник


Ответы (1)


 dat <- read.table(text="Team1 Option7 Option4 Option6 Option1 Option2 Option3 Option5 Option8
     Team2 Option4 Option3 Option1 Option2 Option7 Option8 Option6 Option5")

 cbind( dat[,1,drop=FALSE ], t( apply(dat[ , -1], 1, order) ) )
#     V1 1 2 3 4 5 6 7 8
#1 Team1 4 5 6 2 7 3 1 8
#2 Team2 3 4 2 1 8 7 5 6

Drop =FALSE необходим, чтобы столбец не стал вектором. Транспонирование необходимо, потому что применение возвращает матрицу в основном порядке столбцов.

person IRTFM    schedule 07.03.2012
comment
Выглядит идеально; Благодарность! Из вашего ответа я узнал о order, индексе -1, параметре drop, cbind и базовом apply (в отличие от более часто встречающегося sapply)... потрясающая плотность информации! - person Jason Foster; 08.03.2012