Mein Datenrahmen besteht aus Personen und der Stadt, in der sie zu einem bestimmten Zeitpunkt leben. Ich möchte für jedes Jahr eine Ursprungs-Ziel-Matrix generieren, die die Anzahl der Züge von einer Stadt zur anderen aufzeichnet. Ich würde gerne wissen:Erstellen von Ursprungs-Ziel-Matrizen mit R
- Wie kann ich die Herkunft-Ziel-Tabellen für jedes Jahr automatisch in meinem Datensatz generieren?
- Wie kann ich alle Tabellen im selben 5x5-Format generieren, wobei 5 die Anzahl der Städte in meinem Beispiel ist?
- Gibt es einen effizienteren Code als das, was ich unten vorschlage? Ich beabsichtige, es auf einem sehr großen Datensatz auszuführen.
Betrachten Sie das folgende Beispiel:
#An example dataframe
id=sample(1:5,50,T)
year=sample(2005:2010,50,T)
city=sample(paste(rep("City",5),1:5,sep=""),50,T)
df=as.data.frame(cbind(id,year,city),stringsAsFactors=F)
df$year=as.numeric(df$year)
df=df[order(df$id,df$year),]
rm(id,year,city)
mein Bestes versuchen,
#Creating variables
for(i in 1:length(df$id)){
df$origin[i]=df$city[i]
df$destination[i]=df$city[i+1]
df$move[i]=ifelse(df$orig[i]!=df$dest[i] & df$id[i]==df$id[i+1],1,0) #Checking whether a move has taken place and whether its the same person
df$year_move[i]=ceiling((df$year[i]+df$year[i+1])/2) #I consider that the person has moved exactly between the two dates at which its location was recorded
}
df=df[df$move!=0,c("origin","destination","year_move")]
einen Ursprung Zieltabelle erstellen für 2007
yr07=df[df$year_move==2007,]
table(yr07$origin,yr07$destination)
Ergebnis
City1 City2 City3 City5
City1 0 0 1 2
City2 2 0 0 0
City5 1 1 0 0
Wenn Sie die Ausgabe von simulierten Daten sind zeigt, ist es am besten 'set.seed' vor der Simulation zu verwenden (so dass wir alle dasselbe sehen). – Frank