2017-01-09 3 views
-1

Привет Я хотел бы объединить по дате и уникальных значений, что:Совокупные по дате и уникальной группы

Date  Client_id  Purchase 
01-01-2016 00001   Wine 
01-01-2016 00001   Beer 
01-01-2016 00002   Wine 
02-01-2016 00003   Beer 
02-01-2016 00004   Wine 
03-01-2016 00005   Beer 

Так что я бы что-то вроде:

Date  Number of Clients 
01-01-2016  2 
02-01-2016  2 
03-01-2016  1 

Я пытаюсь с dplyr и базовую функцию R, но мне это не удалось:

daily_customers <- df %>% sum(date) %>% unique(Client_id) 
daily_customers <- aggregate(Date~ unique(client_id)) 

Любое предложение?

ответ

1
library(dplyr) 
df %>% group_by(Date) %>% summarise("Number of Clients" = length(unique(Client_id))) 

library(data.table) 
df[ , .("Number of Clients" = length(unique(Client_id))), by = .(Date)] 

#  Date Number of Clients 
#1 01-01-2016     2 
#2 02-01-2016     2 
#3 03-01-2016     1 
+0

Элегантный, спасибо! , – adrian1121

0
> library(plyr) 
> count(x,'Date') 

     Date freq 
1 01-01-2016 3 
2 02-01-2016 2 
3 03-01-2016 1 
+0

, пожалуйста, проверьте o/p, который требуется OP. –

1

В dplyr, вы можете также использовать n_distinct() вместо использования length(unique())

df %>% 
group_by(Date) %>% 
summarise(nOfClients = n_distinct(Client_id)) 

#  Date nOfClients 
#  <fctr>  <int> 
#1 01-01-2016   2 
#2 02-01-2016   2 
#3 03-01-2016   1