2012-03-07 67 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