Ich möchte die Wahl Schaltwahrscheinlichkeit von Gruppe zuerst berechnen (user
in der unteren Code). Dann werde ich die Wahrscheinlichkeit auf Gruppenebene mitteln und eine Gesamtwahrscheinlichkeit erhalten. Ich habe Zehntausende von Gruppen, also brauche ich den Code, um schnell zu sein. Mein Code ist ein for loop
, der mehr als 10 Minuten benötigt, um zu laufen. Ich habe den gleichen Code/Logik-Excel gemacht, es dauert weniger als ein paar Sekunden.Auswahl Schaltmatrix nach Gruppe für viele Gruppen generieren
Die switching
Wahl m to n
für einen bestimmten Benutzer wird als der Anteil von Beobachtungen, deren Wahl durch erste for-Schleife sind n at period t
und m at period t-1
Meine ursprüngliche Code-Tagging den ersten und letzten Kauf festgelegt. Verwenden Sie dann eine andere for-Schleife, um die Schaltmatrix zu erhalten. Ich bin nur in der Lage die Schaltmatrix durch die gesamten Daten nicht durch Gruppe zu erstellen. Trotzdem ist es immer noch sehr langsam. Hinzufügen von Benutzer würde es noch langsamer machen.
t<-c(1,2,1,1,2,3,4,5)
user<-c('A','A','B' ,'C','C','C','C','C')
choice<-c(1,1,2,1,2,1,3,3)
dt<-data.frame(t,user,choice)
t user choice
1 A 1
2 A 1
1 B 2
1 C 1
2 C 2
3 C 1
4 C 3
5 C 3
# **step one** create a second choice column for later construction of the switching matrix
#Label first purchase and last purchase is zero
for (i in 1:nrow(dt))
{ ifelse (dt$user[i+1]==dt$user[i],dt$newcol[i+1]<-0,dt$newcol[i+1]<-1) }
# **step two** create stitching matrix
# switching.m is a empty matrix with the size of total chocie:3x3 here
length(unique(dt$user))
total.choice<-3
switching.m<-matrix(0,nrow=total.choice,ncol=total.choice)
for (i in 1:total.choice)
{
for(j in 1:total.choice)
{
if(length(nrow(switching.m[switching.m[,1]==i& switching.m[,2]==j,])!=0))
{switching.m[i,j]=nrow(dt[dt[,1]==i&dt[,2]==j,])}
else {switching.m[i,j]<0}
}
}
Die Wunschausgabe für einen bestimmten Benutzer/Gruppe ist wie folgt. Die Ausgabe sollte die gleiche Matrixgröße haben, auch wenn der Benutzer keine bestimmte Wahl bei allen konnte table
und prop.table
nach
lst <- lapply(split(dt, dt$user), function(x)
table(factor(x$choice, levels= 1:3), factor(c(x$choice[-1], NA), levels=1:3)))
nach split
ting von ‚user‘ Wir
# take user C
#output for switching matrix
second choice
first 1 2 3
1 0 1 1
2 1 0 0
3 0 0 1
#output for switching probability
second choice
first 1 2 3
1 0 0.5 0.5
2 1 0 0
3 0 0 1
@akrun
split
, hinzugefügt Code – JimAus irgendeinem Grund wirft Ihr Code Fehler. Bitte überprüfen Sie die Klammern. – akrun
Vielleicht versuchen 'lapply (split (dt $ Wahl, dt $ Benutzer), Funktion (x) Tabelle (x [-Länge (x)], x [-1]))'. – nicola