我有以下数据集
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天 - 每天什么是新的令牌。每天新令牌都有所改善。
答案 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)
以下是使用dplyr
和purrr
的解决方案。请注意,由于您在第二次约会时只有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