R 通过id计算日期变量的连续数

标签 r count continuous

我有一个这样的数据库:

dat = data.frame(id = c(rep("Adam", 5), rep("Bob", 10)), 
                 card_id = c(rep("0001", 2), rep("0002", 3), rep("0003", 5), rep("0004", 5)), 
                 bill_date = c("2017-01", "2017-02", 
                               "2017-01", "2017-02", "2017-03", 
                               "2017-01", "2017-02", "2017-03", "2017-05", "2017-06", 
                               "2017-01", "2017-02", "2017-03", "2017-04", "2017-05"), stringsAsFactors = F)

#      id card_id bill_date
# 1  Adam    0001   2017-01
# 2  Adam    0001   2017-02
# 3  Adam    0002   2017-01
# 4  Adam    0002   2017-02
# 5  Adam    0002   2017-03
# 6   Bob    0003   2017-01
# 7   Bob    0003   2017-02
# 8   Bob    0003   2017-03
# 9   Bob    0003   2017-05
# 10  Bob    0003   2017-06
# 11  Bob    0004   2017-01
# 12  Bob    0004   2017-02
# 13  Bob    0004   2017-03
# 14  Bob    0004   2017-04
# 15  Bob    0004   2017-05

我想获取每个id的每个card_id的最大连续帐单数量。

预期结果:

#      id card_id max_cont_bill_num
# 1  Adam    0001                 2
# 2  Adam    0002                 3
# 3   Bob    0003                 3
# 4   Bob    0004                 5

最佳答案

我们可以尝试使用difftimerle。创建一个函数将'bill_date'转换为Date,类,获取相邻日期的差异,转换为整数,然后获取值的run-length-id,选择最大值长度。按“id”、“card_id”分组后应用该函数

f1 <- function(x)  {
                x1 <- as.Date(paste0(x, "-01") )
                x2 <- as.integer(difftime(x1[-1], x1[-length(x1)], unit = "weeks"))
                  max(rle(c(x2[1], x2))$lengths) 
                  }

dat %>% 
   group_by(id, card_id) %>%
    summarise(max_count = f1(bill_date))        
# A tibble: 4 x 3
# Groups:   id [?]
#  id    card_id max_count
#  <chr> <chr>       <int>
#1 Adam  0001            2
#2 Adam  0002            3
#3 Bob   0003            3
#4 Bob   0004            5

关于R 通过id计算日期变量的连续数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52752002/

相关文章:

Swift:如何从 NSTextField 连续发送一个 Action

.net - 生产中 .NET 应用程序的持续性能监控?

r - R中的错误: could not find function . ..

r - 在 R 中的打印语句中添加换行符

Python 计算具有匹配属性的对象列表中的元素

mysql - 从多个表中选择计数并分组

testing - 软件测试自动化框架 (STAF) 或 Jenkins

python - R 用户的 matplotlib?

r - 用 ";"分隔变量并创建新行

MYSQL 查询所需总计