Mam dataframe z poniższego formularza:Przegrupuj data.frame uzyskać sekwencyjną kolejność produktów
df <- data.frame(client = c("client1", "client1", "client2", "client3", "client3"),
product = c("A", "B", "A", "D", "A"),
purchase_Date = c("2010-03-22", "2010-02-02", "2009-03-02", "2011-04-05", "2012-11-01"))
df$purchase_Date <- as.Date(df$purchase_Date, format = "%Y-%m-%d")
który wygląda tak:
client product purchase_Date
1 client1 A 2010-03-02
2 client1 B 2010-02-02
3 client2 A 2009-03-02
4 client3 D 2011-04-05
5 client3 A 2012-11-01
które chciałbym zmienić tak :
client purchase1 purchase2
1 client1 B A
2 client2 A <NA>
3 client3 D A
więc chciałbym dowiedzieć się, który produkt był pierwszy, drugi, trzeci i tak dalej, każdy perso n zamówiony przez datę zakupu. Mogę łatwo uzyskać każdy indywidualnie za pomocą danych.tabeli:
library(data.table)
setDT(df)[ , .SD[order(-purchase_Date), product][1], by = client]
dla pierwszego. ale nie mam pojęcia, jak skutecznie uzyskać pożądany wynik.
To, uważam, jest bardziej wydajne, ponieważ unika wywołania 'frank()' dla każdego 'by'. 'seq_len()' powinno być bardzo pomijalne ... Byłoby wspaniale do testowania! – Arun
Tylko testy porównawcze na milionach wierszy z 10000 klientami - 'frank = 2.6s' vs' order() = 0.5s'. Dodano [FR # 1197] (https://github.com/Rdatatable/data.table/issues/1197). – Arun