2017-05-17 82 views
0

沒有重複,我有以下數據設置計數,獨特的和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) 

我試圖讓下面的統計

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: 新令牌 - 在第一一天 - 所有獨特的令牌都是新的令牌。從第二天開始 - 需要比較每一天的獨特卡片並查看它是否從prev開始重複。一天,如果不重複,那麼它的當天的新令牌 編輯2: 基本上我有1個月的數據範圍,我試圖找到那30天 - 在每一天什麼是新的令牌。每天都有新的令牌改進。

+0

我沒有得到你的'新Token' 2個獨特的新令牌。 「...... 120」日期不應該是3,「...... 121」日期應該是4? – Sotos

+0

@Sotos第一天--4個獨特的令牌(一個副本),它們都是新的令牌。第二天,3個新標記作爲15562500000000000000,13959500000000000000,13959500000000000000已經從prev重複。一天 – RUser

+0

啊......好吧。 – Sotos

回答

1

我覺得這會給你想要的東西:

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

對於新的標記 - 是否有辦法檢查不僅是前一天,而是整個月 – RUser

+0

@RUser我認爲罐頭按月份分組。但似乎比首先想到的更復雜的操作。 – mt1022

1

下面是使用dplyrpurrr的解決方案。請注意,我不明白你在你的問題給出如下結果,因爲你只需要第二個日期

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