我有下面提到的数据框:
DF <- read.table(text = "
Date ID
2018-04-01 K-1
2018-04-01 K-1
2018-04-01 K-8
2018-04-02 K-2
2018-04-02 K-2
2018-04-03 K-2
2018-04-03 K-2
2018-04-03 K-2
2018-04-04 K-3
2018-05-01 K-5
2018-05-01 K-5
2018-05-02 K-6
2018-05-02 K-7", header = TRUE, stringsAsFactors = FALSE)
通过使用上面提到的datafram,我想确定下面提到的指标:
Date Unique_count Duplicate_Count Overall_Duplicate
2018-04-01 2 1 0
2018-04-02 1 1 0
2018-04-03 0 0 3
2018-04-04 1 0 0
2018-05-01 1 1 0
2018-05-02 2 0 0
其中:
Unique_count
- 针对特定日期创建的区别ID
ID
不应与之前的ID
匹配。
Duplicate_count
- 额外数量(如果有2 K-1
比 - Duplicate_count
应为1)相同ID
生成的特定日期,相同ID
不应与之前的任何ID
匹配。
Overall_Duplicate
- 先前已生成并再次出现在特定日期的ID
计数。
我有下面提到的代码,不确定Overall_Duplicate
:
library(dplyr)
DF2 <- DF %>%
group_by(Date) %>%
summarise(Unique_Count = n_distinct(ID),
Duplicate_Count = sum(table(ID)>1))
答案 0 :(得分:1)
如果您首先按ID进行分组并找到第一次出现每个ID,则可以将所有后续ID(在它们第一次出现之后)更改为NA,然后进行一些计算以获得所需内容。
DF %>%
group_by(ID) %>%
mutate(first_time = min(Date)) %>%
ungroup() %>%
mutate(ID = ifelse(Date == first_time, ID, NA)) %>%
group_by(Date) %>%
summarise(Unique_Count = n_distinct(ID, na.rm = TRUE),
Overall_Duplicate = sum(is.na(ID)),
Duplicate_Count = n() - Unique_Count - Overall_Duplicate)
答案 1 :(得分:0)
你可以尝试这样的事情。但根据您可重复的数据,它是硬编码的。在现实生活中可能存在误报。
library(tidyverse)
DF %>%
mutate(id=duplicated(ID)) %>%
group_by(ID) %>%
mutate(OLdate=n_distinct(Date)>1) %>%
group_by(Date) %>%
summarise(Unique_count=sum(!na_if(id, T), na.rm = T),
Duplicate_Count=ifelse(Unique_count == 0, 0, sum(id)),
Overall_Duplicate=ifelse(Unique_count == 0,sum(OLdate), 0))
# A tibble: 6 x 4
Date Unique_count Duplicate_Count Overall_Duplicate
<chr> <int> <dbl> <dbl>
1 2018-04-01 2 1 0
2 2018-04-02 1 1 0
3 2018-04-03 0 0 3
4 2018-04-04 1 0 0
5 2018-05-01 1 1 0
6 2018-05-02 2 0 0