I gefragt, ob es ist möglich, jede ganze Zahl in einem Satz von Zahlen zu String und in eine Übergangsmatrix-Transformation, beispielsweiseAufspalten ganze Zahlen und Umwandeln in Matrix
data<-c(11,123,142,1423,1234,12)
was ich tun möchte ist aufzuzuspalten jede Ganzzahl in den Daten (berücksichtigt nur die ersten beiden Elemente in dem Datensatz), das erste Element ist 1,1, das zweite Element ist 1,2,3 .... und wandelt es in die Matrix e um, g 1,1 wird sein 1 zu 1, 1,2 ist 1 zu 2 und 2,3 ist 2 zu 3.
1 2 3 4 5
1 1 1 0 0 0
2 0 0 1 0 0
3 0 0 0 0 0
4 0 0 0 0 0
5 0 0 0 0 0
Meine ma Trix wird niemals 5x5 überschreiten. Unten ist, was ich getan habe, was funktioniert, aber es ist wirklich sehr langweilig.
data2<-as.matrix(as.character(data))
for(i in 1:nrow(data2)) {
values<-strsplit(data2,"")
}
values2<-t(sapply(values, '[', 1:max(sapply(values, length))))
values2[is.na(values2)]<-0
values3<-apply(values2,2,as.numeric)
from1to1<-0
from1to2<-0
from1to3<-0
from1to4<-0
from1to5<-0
from2to1<-0
from2to2<-0
from2to3<-0
from2to4<-0
...
from5to4<-0
from5to5<-0
for(i in 1:nrow(values3)){
for(j in 1:(ncol(values3)-1))
if (((values3[i,j]==1)&(values3[i,j+1]==1))){
from1to1<-from1to1 + 1
}else{
if (((values3[i,j]==1)&(values3[i,j+1]==2))){
from1to2<-from1to2 + 1
}else{
if (((values3[i,j]==1)&(values3[i,j+1]==3))){
from1to3<-from1to3 + 1
}else{
if (((values3[i,j]==1)&(values3[i,j+1]==4))){
from1to4<-from1to4 + 1
}else{
if (((values3[i,j]==1)&(values3[i,j+1]==5))){
from1to5<-from1to5 + 1
}else{
if (((values3[i,j]==1)&(values3[i,j+1]==1))){
from1to1<-from1to1 + 1
}else{.....continues through all other from2to1...from5to5``
Ich stelle dann jede einzelne Zahl in eine 5x5-Matrix.
Dies ist offensichtlich langwierig und lang und lächerlich. Gibt es da überhaupt eine Verkürzung? Irgendwelche Vorschläge werden geschätzt.
Wenn ich das richtig verstehe, ist der gebräuchlichste Ansatz in solchen Fällen, eine zweispaltige "Matrix" zu erstellen, die die [row, col] Indizes von Werten speichert, die Sie in Ihre 5x5 "Matrix" einfügen wollen. I.e. build 'do.call (rbind, lapply (strsplit (as.zeichen (daten)," "), funktion (x) {v = as.numerisch (x); cbind (v [-länge (x)), v [ -1])})) '. Dann sehen Sie '? Xtabs' oder, noch besser, die vorherige" Matrix "als, sagen wir,' tmp', verwenden Sie Matrix :: sparseMatrix (i = tmp [, 1], j = tmp [, 2], x = 1L, dims = c (5, 5), dimnames = Liste (1: 5, 1: 5)), um eine dünne Matrix zu verwenden. –
Brauchen Sie die umgekehrten Kombinationen? Zum Beispiel für '12' wollen Sie die Matrix zu einem füllen 'mat [1, 2]' oder muss es auch füllen mat [2, 1] '? – dayne