R中的数量,明显和不重复

时间:2017-05-17 06:23:08

标签: r count distinct

我有以下数据集

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重复。一天,如果没有重复,那么它是当天的新令牌 的 EDIT2: 基本上我有1个月的数据范围,我试图找到那30天 - 每天什么是新的令牌。每天新令牌都有所改善。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

以下是使用dplyrpurrr的解决方案。请注意,由于您在第二次约会时只有2个独特的新令牌,因此我无法获得您在问题中提供的结果

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