2017-05-17 1 views
0

je les données suivantes miscomte, Distinct et Pas de répétition en R

zz <- "Date Token 
20170120 12073300000000000000 
20170120 18732300000000000000 
20170120 15562500000000000000 
20170120 13959500000000000000 
20170120 13959500000000000000 
20170121 13932200000000000000 
20170121 10589400000000000000 
20170121 15562500000000000000 
20170121 13959500000000000000 
20170121 13959500000000000000 
20170121 10589400000000000000" 

Data <- read.table(text=zz, header = TRUE) 

Je suis en train d'obtenir au-dessous de stats

Date  # of Transactions Unique Token New Token 
20170120 5     4    4 
20170121 6     4    3 

# of Transactions - Total Transactions (includes duplicate tokens) 
unique Token - No duplicates 
New Token - No repetition with other dates. 

Edit1: nouveau jeton - Sur le premier jour - tous les jetons uniques sont de nouveaux jetons. à partir du jour suivant - besoin de comparer chaque carte unique de jour et voir si elle est répétée à partir du prev. jour, sinon répété alors c'est un nouveau jeton pour ce jour Éditer2: Essentiellement j'ai 1 mois de gamme de données et j'essaie de trouver pour ces 30 jours - sur chaque jour quel est le nouveau jeton. Y a-t-il eu une amélioration du nouveau jeton au quotidien?

+0

Je ne reçois pas votre '' nouveau jeton''. Ne devrait-il pas être 3 pour «... 120» date et 4 pour «... 121» date? – Sotos

+0

@Sotos pour le premier jour - 4 jetons uniques (un doublon) et tous sont de nouveaux jetons. Pour le jour suivant 3 nouveaux jetons comme 15562500000000000000,13959500000000000000,13959500000000000000 ont été répétés à partir de prev. jour – RUser

+0

ahh ... ok je l'ai. – Sotos

Répondre

1

Je pense que cela va donner ce que vous voulez:

Data %>% 
    mutate(new.tk = !duplicated(Token)) %>% 
    group_by(Date) %>% 
    summarize(
     count = n(), 
     unique = n_distinct(Token), 
     new = ifelse(Date[1] == Data$Date[1], sum(new.tk), sum(Token %in% Token[new.tk])) 
) 

# # A tibble: 2 × 4 
#  Date count unique new 
#  <int> <int> <int> <int> 
# 1 20170120  5  4  4 
# 2 20170121  6  4  3 
+0

Pour un nouveau jeton - existe-t-il un moyen de vérifier non seulement le jour précédant, mais le mois entier – RUser

+0

@RUser être fait en regroupant par mois. Mais il semble que l'opération plus complexe que la première pensée. – mt1022

1

Voici une solution en utilisant dplyr et purrr. Notez que je n'obtiens pas les résultats que vous avez donnés dans votre question, car vous n'avez que 2 nouveaux jetons uniques pour la deuxième date.

df <- Data %>% 
    group_by(Date) %>% 
    summarise(N_transac = n(), 
       unique_token = n_distinct(Token), 
       tokens = list(Token)) %>% 
    mutate(prev = lag(tokens, 1), 
      new = purrr::map2_int(tokens, prev, ~length(setdiff(.x, .y)))) %>% 
    select(-tokens, -prev) 
df 
# A tibble: 2 <U+00D7> 4 
     Date N_transac unique_token new 
    <int>  <int>  <int> <int> 
1 20170120   5   4  4 
2 20170121   6   4  2