r - 当行间日期在指定时间限制内时如何合并行
问题描述
我有一些数据如下
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=", ")
但是如何实现我的合并行条件?
解决方案
Team
只要两个连续日期之间的差异大于 29,您就可以在每个组中创建一个新组。对于每个组,将Date
andText
列折叠到一个逗号分隔的字符串中。
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
推荐阅读
- javascript - 光滑的幻灯片,缩略图显示偏离中心
- python - 文件存在时找不到Django文件错误
- python - 使用不和谐机器人按时间间隔发送消息
- powershell - 如何使用 Powershell 在基于图像的目录中查找 pdf(Windows 环境)?
- node.js - 语法错误:Nodejs Typescript Express 中的 swagger-jsdoc 设置
- azerothcore - 如何只为GM锁定一个领域?
- fortran - MPI_alltoallw 工作和 MPI_Ialltoallw 失败
- c - 如何获得第二个输出为否
- javascript - 如何在 puppeteer 中的 page.evaluate() 中使用 page.type()?
- rest - 设计返回子资源父级的 URL 的 RESTful 方式是什么?