2012-03-07 65 views
2

我已经使用LimeSurvey捕获8个选项的排名信息跨大班学生。我已经导出结果为CSV,我也得到类似下面的...分析LimeSurvey排名数据在R

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和其他方法可能会有所帮助,但不得不使用“职位”信息让我失望。

感谢任何帮助!

回答

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来防止列成为向量。转置是必需的,因为apply会按列主要顺序返回一个矩阵。

+0

看起来很完美;谢谢!从你的回答中,我了解到'order','-1'索引,'drop'参数,'cbind'和基本'apply'(与更常见的'sapply'相反)......一个很棒的信息密度! – 2012-03-08 14:00:52