2016-06-30 4 views
0

Ich habe Daten im CSV-Format zur Verfügung.Anordnen von Daten in R für Warenkorbanalyse

Das Datenformat ist wie folgt. Mit Receipt nos in einer Spalte und Produkt in der entsprechenden Spalte

Receipt_no Product 
A1 Apple 
A1 Banana 
A1 Orange 
A2 Pineapple 
A2 Jackfruit 
A3 Cola 
A3 Tea 

Ich mag, dass sie neu zu ordnen als

A1 , Apple, Banana, Orange 
A2 , Pineapple, Jackfruit 
A3 , Cola, Tea 

Das ist die Quittung Nummern und Produktnamen in einer Zeile durch Komma getrennt. Da die Daten groß sind, möchte ich das gleiche in R neu anordnen.

Bitte helfen

Danke.

Regards, Nithish

+0

Können Sie bitte antworten, ob einer der unten für Sie funktioniert? – mtoto

+0

Antwort von Soto war gut – Nithish

Antwort

0

Base-R,

aggregate(Product ~ Receipt_no, df, paste, collapse = ',') 

dplyr Unter Verwendung

df %>% 
    group_by(Receipt_no) %>% 
    summarise(new = paste(Product, collapse = ',')) 
+0

Ich habe 750000 Zeilen von Daten. Ich habe die BaseR-Funktion verwendet, die Sie vorgeschlagen haben. Können wir die Zeit im Voraus abschätzen, um sie auszuführen? – Nithish

+0

Ich bin mir nicht sicher, dass Sie das tun können. Es gibt eine Funktion namens 'Sys.time', aber es muss das Skript ausführen. Am schnellsten geht es jedoch mit 'data.table'. Sie können meinen obigen Code einfach in 'data.table' übersetzen. – Sotos

+0

Danke, dass es funktioniert hat! – Nithish

0

Basis R Verwenden von:

u <- as.vector(unique(df$Receipt_no)) 
as.list(sapply(u, function(x) paste0(x, ", ", paste0(subset(df$Product, df$Receipt_no==x), collapse = ", ")))) 

# $A1 
# [1] "A1, Apple, Banana, Orange" 

# $A2 
# [1] "A2, Pineapple, Jackfruit" 

# $A3 
# [1] "A3, Cola, Tea" 

df <- structure(list(Receipt_no = structure(c(1L, 1L, 1L, 2L, 2L, 3L, 
3L), .Label = c("A1", "A2", "A3"), class = "factor"), Product = structure(c(1L, 
2L, 5L, 6L, 4L, 3L, 7L), .Label = c("Apple", "Banana", "Cola", 
"Jackfruit", "Orange", "Pineapple", "Tea"), class = "factor")), .Names = c("Receipt_no", 
"Product"), class = "data.frame", row.names = c(NA, -7L))