2

我使用 LimeSurvey 为一大群学生捕获了 8 个选项的排名信息。我已将结果导出为 CSV,我得到如下内容...

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

... 排名从最低到最高(例如 Team1 最喜欢 Option7)。我试图把它变成......

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可能会有所帮助,但不得不使用“位置”信息让我感到困惑。

非常感谢任何帮助!

4

1 回答 1

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 按列主要顺序返回一个矩阵。

于 2012-03-07T23:55:28.327 回答