クロス表作成のためにバイナリデータに変換する

アンケートみたいなデータだと

解答した番号
students1 1,2,3
students2 4,5,6,7
students3 1,2,4,5

みたいな形になってて、そのままクロス表を作れないということが結構ある*1。バイナリデータにしないといけないんだけど、それのためのコードをRで書いてみた。

> students <- c("1,2,3","4,5,6,7","1,2,4,5")
> students.table <- matrix(0,3,7,byrow=T)
> students.table
     [,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,]    0    0    0    0    0    0    0
[2,]    0    0    0    0    0    0    0
[3,]    0    0    0    0    0    0    0
> row.names(students.table) <- c("students1","students2","students3")
> colnames(students.table) <- c("1","2","3","4","5","6","7")
> for(i in 1:length(students)){
+   for(j in 1:length(strsplit(students,split=",")[[i]])){
+     num <- strsplit(students,split=",")[[i]][j]
+     students.table[i,num] <-1      
+   }
+ }
> students.table
          1 2 3 4 5 6 7
students1 1 1 1 0 0 0 0
students2 0 0 0 1 1 1 1
students3 1 1 0 1 1 0 0

まあ、strsplitが使ってみたかっただけという話もある。

*1:入力が人間の場合、こういう形にしといたほうがやりやすいからね。