首页 > 解决方案 > 当行间日期在指定时间限制内时如何合并行

问题描述

我有一些数据如下

Team    Date         Text
1        13/12/01     mytext1
2        12/01/13     mytext2
2        05/02/13     mytext3
3        14/02/14     mytext4
3        16/02/14     mytext5
3        01/03/14     mytext6
4        29/03/12     mytext7

我想合并团队中两行之间的日期列之间的差异<29的行,这应该导致:

Team         Date                                          Text
1            13/12/01                                      mytext1
2,2          12/01/13,05/02/13                             mytext2,mytext3
3,3,3        14/02/14,16/02/14,16/02/14                    mytext4,mytext5,mytext6
4            29/03/12                                      mytext7

我被困在如何根据这种情况合并。到目前为止,我有:

df%>%
  mutate(diff_days = difftime(Date , lag(Date ),units="days"))%>%
  group_by(Team,diff_days)%>%
  summarize_all(paste,collapse=", ")

但是如何实现我的合并行条件?

标签: r

解决方案


Team只要两个连续日期之间的差异大于 29,您就可以在每个组中创建一个新组。对于每个组,将DateandText列折叠到一个逗号分隔的字符串中。

library(dplyr)

df %>%
  mutate(Date = lubridate::dmy(Date)) %>%
  group_by(Team) %>%
  group_by(grp = cumsum(Date - 
                 lag(Date, default = first(Date)) > 29), .add = TRUE) %>%
  summarise(across(c(Date, Text), toString)) %>%
  select(-grp) %>%
  ungroup

#   Team Date                               Text                     
#  <int> <chr>                              <chr>                    
#1     1 2001-12-13                         mytext1                  
#2     2 2013-01-12, 2013-02-05             mytext2, mytext3         
#3     3 2014-02-14, 2014-02-16, 2014-03-01 mytext4, mytext5, mytext6
#4     4 2012-03-29                         mytext7        

推荐阅读