2017-05-17 2 views
0

Ich habe ein DatasetCount nicht -repeats für eine Spalte

dput(Data) 
    structure(list(Date = c(20170120L, 20170120L, 20170120L, 20170120L, 
    20170120L, 20170121L, 20170121L, 20170121L, 20170121L, 20170121L, 
    20170121L, 20170122L, 20170122L, 20170122L, 20170122L, 20170122L, 
    20170123L, 20170123L, 20170123L, 20170123L), Card = c(1207330L, 
    1873230L, 1556250L, 1395950L, 1395950L, 1393220L, 1058940L, 1556250L, 
    1395950L, 1395950L, 1058940L, 1207330L, 1058940L, 1700880L, 1395950L, 
    1055360L, 1395950L, 1556250L, 1207330L, 1395950L)), .Names = c("Date", 
    "Card"), class = "data.frame", row.names = c(NA, -20L)) 

und ich versuche, dieses stat

business_date  New Card 
20170120    4 
20170121    2 
20170122    2 
2017

Am ersten Tag zu erhalten - alle einzigartigen neuen Karten (1207330,1873230,1556250,1395950) neue Karten sein . Am zweiten Tag werden alle einzigartigen Karten für diesen zweiten Tag mit dem ersten Tag verglichen und diejenigen, die nicht wiederholt werden, sind Neue Karten ( 1393220,1058940). Am dritten Tag - brauchen neue Karten, die nicht in beiden ersten und zweiten Tag (1700880,1055360) und so weiter sind.

Antwort

2

In Basis R dies durch aggregate ing die nicht-duplizierten Karten pro Datum erfolgen würde:

aggregate(!duplicated(df$Card), by = list(df$Date), FUN = sum) 
# Group.1 x 
#1 20170120 4 
#2 20170121 2 
#3 20170122 2 
#4 2017

Oder in dplyr:

library(dplyr) 
df %>% 
    mutate(count = !duplicated(Card)) %>% 
    group_by(Date) %>% 
    summarise(n = sum(count)) 

## A tibble: 4 × 2 
#  Date  n 
#  <int> <int> 
#1 20170120  4 
#2 20170121  2 
#3 20170122  2 
#4 2017