我使用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 like”的方式(例如避免嵌套for
循环等)。我的最终目标是为每个选项生成直方图,显示他们在第一,第二等投票的频率。我怀疑reshape
这可能会有所帮助,但是必须使用“位置”信息让我感到沮丧起来。
感谢任何帮助!
答案 0 :(得分: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按列主要顺序返回矩阵。