Mit dem gewünschten Ausgang des OP geklärt:
Wir auch dies tun können, mit Base R, die schneller als die unten dplyr
Ansatz mit group_by(Customer.ID)
Ansatz sein wird, da wir nicht über alle einzigartigen Customer.ID
:
durchlaufen müssen
Hinweise:
- Zuerst sortiert nach
Customer.ID
aufsteigend nach Date
gefolgt, um von Rank
aufsteigend gefolgt absteigend.
- Entfernen Sie die Duplikate in
Customer.ID
, so dass nur die erste Zeile für jede Customer.ID
gehalten wird.
Das Ergebnis Ihrer gesendeten Daten als Datenrahmen mit df
(ohne die Date
Spalte Umwandlung) in aufsteigender Reihenfolge für Customer.ID
:
print(res)
## Customer.ID Date Rank
##2 576293 11/16/2015 6
##5 581252 1/4/2016 5
##7 581600 1/12/2015 2
##8 582560 4/13/2016 1
##10 586334 3/30/2014 1
##9 591674 3/21/2012 6
Daten:
df <- structure(list(Customer.ID = c(591674L, 586334L, 582560L, 581600L,
581252L, 576293L), Date = c("3/21/2012", "3/30/2014", "4/13/2016",
"1/12/2015", "1/4/2016", "11/16/2015"), Rank = c(6L, 1L, 1L,
2L, 5L, 6L)), .Names = c("Customer.ID", "Date", "Rank"), row.names = c(9L,
10L, 8L, 7L, 5L, 2L), class = "data.frame")
Wenn Sie nur die neuesten d behalten möchten Zeile ate (von niedrigerem Rang gefolgt) für jeden Customer.ID
, können Sie die folgenden Aktionen mit dplyr
:
library(dplyr)
res <- df %>% group_by(Customer.ID) %>% arrange(desc(Date),Rank) %>%
summarise_all(funs(first)) %>%
ungroup() %>% arrange(Customer.ID)
Hinweisen:
group_by
Customer.ID
und sortieren arrange
durch Date
mit Ordnung und Rank
von aufsteigend in absteigend Auftrag.
summarise_all
, um nur die erste Zeile von jedem Customer.ID
zu behalten.
- Schließlich
ungroup
und sortieren nach Customer.ID
, um Ihr gewünschtes Ergebnis zu erhalten.
Verwenden Sie Ihre Daten als Datenrahmen df
mit der Date
Spalte in die Date
Klasse umgewandelt:
print(res)
### A tibble: 7 x 3
## Customer.ID Date Rank
## <int> <date> <int>
##1 576293 2015-11-16 6
##2 581252 2016-01-04 5
##3 581600 2015-01-12 2
##4 582560 2016-04-13 1
##5 586334 2014-03-30 1
##6 591674 2012-03-21 6
Daten:
df <- structure(list(Customer.ID = c(576293L, 576293L, 581252L, 581252L,
581252L, 581600L, 581600L, 582560L, 591674L, 586334L), Date = structure(c(15565,
16755, 16031, 15294, 16804, 16447, 16447, 16904, 15420, 16159
), class = "Date"), Rank = c(2L, 6L, 4L, 6L, 5L, 3L, 2L, 1L,
6L, 1L)), .Names = c("Customer.ID", "Date", "Rank"), row.names = c(NA,
-10L), class = "data.frame")
Scheint, wie Sie sollten nur sortieren Sie Ihre Daten und Verwende dann 'unique()' oder 'duplicated()', um duplizierte IDs zu entfernen. – MrFlick
Es wäre besser, wenn Sie Probendaten nach 'dput'-Funktion bereitstellen können. –
Ihr Ergebnis hat keine eindeutigen Kundennummern –