2017-05-17 38 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