2017-09-04 2 views
-2

Ich habe einen Transaktionsdatensatz von 10 Kunden vom 01.01.2013 bis 01-11-2016. Ich teile den Datensatz für jeden Kunden manuell wie folgt auf, aber ich konnte nicht finden, wie man eine Schleife dafür erstellt. Was ist die beste Schleife dafür?Stuck in Erstellen von Schleife in R

This is how my data set looks like for one customer

customer_1 <- transactions[1:47,] 
customer_2 <- transactions[48:94,] 
customer_3 <- transactions[95:141,] 
customer_4 <- transactions[142:188,] 
customer_5 <- transactions[189:235,] 
customer_6 <- transactions[236:282,] 
customer_7 <- transactions[283:329,] 
customer_8 <- transactions[330:376,] 
customer_9 <- transactions[377:423,] 
customer_10 <- transactions[424:468,] 
+1

Viele Optionen zum Bearbeiten eines Datenrahmens nach Gruppen. Die 'group_by()' Funktion im 'dplyr' Paket ist ein guter Startpunkt. Mit Base R können Sie die Funktion 'split()' oder 'tapply()' verwenden. Oder das Paket data.table hat ein 'by' -Argument. Siehe diese Frage für Ideen https://StackOverflow.com/q/11562656/134830 –

+1

Obwohl es möglich wäre, einen Vektor von Indizes zu verwenden, um die Daten iterativ zu partitionieren und 'assign', um die Variable dynamisch zu erstellen, denke ich, dass es ein bessere Idee, es in eine Liste von data.frames aufzuteilen (https://stackoverflow.com/questions/17499013/how-do-i-make-a-list-of-data-frames/24376207#24376207) oder (wie @RichieCotton vorgeschlagen) halte es einen Rahmen und arbeite gruppenweise. – r2evans

+0

out <- split (Transaktionen, f = Transaktionen $ customer_id) gibt Ihnen eine Liste von Elementen, jedes enthält alle Transaktionen von einem Kunden –

Antwort

0

Sie sollten Split verwenden, um Ihre Datenrahmen aufgeteilt:

out <- split(transactions, f = transactions$customer_id) 

Dann, wenn Sie eine Variable vom Kunden zuweisen möchten, können Sie

counter = 1 
for (elt in out){ 
    assign(paste("customer", counter, sep ="_"), elt) 
    counter <- counter + 1 
} 

tun Welche erstellt die Variablen customer_1, customer_2 ....

+2

Das technisch sicherlich tut, was gefragt wird, aber ich empfehle, es auf diese Weise zu tun: mit Daten wie diese, was auch immer du an einem Datenrahmen machst, wirst du auch mit den anderen machen. Wenn man sie in verschiedene Variablen wie zB eingibt, muss man entweder manuell oder dynamisch mit 'ls()' und 'get()', einem Hack, programmieren. Es ist einfacher (um zu programmieren, zu folgen, zu debuggen), um mit einer Liste von data.frames umzugehen. – r2evans

+0

Danke Jungs. @ Emmanuel-Lin, ich habe den Code benutzt, den du geteilt hast und es hat funktioniert, aber die Kunden sind nicht in Ordnung. Kunde_1 beginnt ab Zeile 377. Wie kann ich Kunde_1 aus Zeile 1 in der Reihenfolge starten? –