R - 每个ID和日期的计数观察[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我有一个包含2列的索赔文件:“客户ID”,“声明日期”。

我希望看到(并统计)客户是否在X时间内涉及多起事故(假设一年)。

我的数据如下:

Customer_Id     Declaration_date   
001             12/10/2017
001             12/10/2017
002             24/10/2017
003             25/10/2017
004             25/10/2017
001             05/12/2017
006             07/12/2017

这里是:

D <- data.frame(Customer_Id = c(001, 001, 002, 003, 004, 001, 006),
            Declaration_date = as.Date(c("12/10/2017", "12/10/2017", "24/10/2017", "25/10/2017", "25/10/2017", "05/12/2017", "07/12/2017"), format = "%d/%m/%Y"))

在这里,我们可以看到客户“001”在12月10日有两个索赔,但在05/12也有一个索赔。因此,我想要的是第三栏,根据客户自2016年1月1日起的日期计算不同索赔的数量。输出应如下所示:

Customer_Id     Declaration_date     Number of claims 
001             12/10/2017           2
001             12/10/2017           2
002             24/10/2017           1
003             25/10/2017           1
004             25/10/2017           1
001             05/12/2017           2
006             07/12/2017           1

请注意,在同一日期拥有多次客户ID不应与“索赔数量”相加。在我的例子中,客户001有“2”索赔,因为他在12月10日有一个(或多个)索赔,但也在05/12。

任何帮助将非常感谢。

非常感谢,

r filter count
1个回答
0
投票

我们可以使用avebase R通过获取'Declaration_date'的lengthofunique`元素来创建一个列

with(D, ave(as.numeric(Declaration_date), Customer_Id, FUN = function(x) length(unique(x))))

或者与dplyr

library(dplyr)
D %>%
  group_by(Customer_Id) %>%
  mutate(Number_of_claims = n_distinct(Declaration_date))

或者使用data.table

library(data.table)
setDT(D)[,  Number_of_claims := uniqueN(Declaration_date), Customer_Id]
© www.soinside.com 2019 - 2024. All rights reserved.