Zeilendaten in binäre Spalten konvertieren
Ich versuche, eine Datenspalte in viele binäre Spalten zu formatieren, um sie schließlich für das Assoziationsregel-Mining zu verwenden. Ich hatte einige Erfolge bei der Verwendung einer for-Schleife und einer einfachen Triplett-Matrix, bin mir jedoch nicht sicher, wie ich danach nach den Ebenen in der ersten Spalte aggregieren soll - ähnlich wie bei einergruppiere nach Anweisung in SQL. Ich habe unten ein Beispiel angegeben, allerdings mit einem viel kleineren Datensatz. Wenn dies erfolgreich ist, wird mein tatsächlicher Datensatz 4.200 Zeilen mal 3.902 Spalten groß sein, sodass jede Lösung skalierbar sein muss. Anregungen oder alternative Ansätze wäre sehr dankbar!
> data <- data.frame(a=c('sally','george','andy','sue','sue','sally','george'), b=c('green','yellow','green','yellow','purple','brown','purple'))
> data
a b
1 sally green
2 george yellow
3 andy green
4 sue yellow
5 sue purple
6 sally brown
7 george purple
x <- data[,1]
for(i in as.numeric(2:ncol(data)))
x <- cbind(x, simple_triplet_matrix(i=1:nrow(data), j=as.numeric(data[,i]),
v = rep(1,nrow(data)), dimnames = list(NULL, levels(data[,i]))) )
##Looks like this:
> as.matrix(x)
name brown green purple yellow
[1,] "sally" "0" "1" "0" "0"
[2,] "george" "0" "0" "0" "1"
[3,] "andy" "0" "1" "0" "0"
[4,] "sue" "0" "0" "0" "1"
[5,] "sue" "0" "0" "1" "0"
[6,] "sally" "1" "0" "0" "0" ##Need to aggregate by Name
##Would like it to look like this:
name brown green purple yellow
[1,] "sally" "1" "1" "0" "0"
[2,] "george" "0" "0" "0" "1"
[3,] "andy" "0" "1" "0" "0"
[4,] "sue" "0" "0" "1" "1"