r - 过滤数据框以保留行,直到列值更改为 0
问题描述
我有这个数据框,
`df <- tibble(
key = rep(1:3, c(8,4,5)),
Date = c(seq(as.Date('2016-12-17'), as.Date('2016-12-19'), '1 day'),
seq(as.Date('2016-12-21'), as.Date('2016-12-23'), '1 day'),
seq(as.Date('2016-12-29'), as.Date('2016-12-30'), '1 day'),
seq(as.Date('2017-05-18'), as.Date('2017-05-21'), '1 day'),
seq(as.Date('2017-05-18'), as.Date('2017-05-20'), '1 day'),
seq(as.Date('2017-05-23'), as.Date('2017-05-24'), '1 day')),
flag= c(1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,0,1)
)`
对于每个“键”,我需要在“标志”第一次变为 0 之前的“日期”的最大值,或者如果“键”没有 0 标志,则返回“日期”的最大值。
我需要以下输出。
key Date flag
1 2016-12-19 1
2 2017-05-21 1
3 2017-05-20 1
有人可以帮我吗?
谢谢你。
解决方案
在下面的代码中,我使用了 match 返回第一个匹配项的位置这一事实。然后我用行的索引创建一个额外的列,以便我可以在第一次出现后过滤所有行flag = 1
df %>%
group_by(key) %>%
arrange(Date) %>%
mutate(idx = 1:n()) %>%
filter(idx < match(0,flag) | is.na(match(0,flag))) %>%
summarise(Date = max(Date))
希望这可以帮助!!
推荐阅读
- r - Docker:运行 rocker/shiny-verse 和 rocker/shiny 图像时权限被拒绝
- reactjs - 从异步等待中保存对象时的无限循环
- javascript - Webdev,前端和后端:如何知道实体是否属于用户?
- sql - 如何在Postgresql中jsonb中的where条件下获取数据
- c# - 无法获取 C# 默认接口方法进行编译
- powershell - 如何在 PowerShell 中带有尾随空格的文件夹上使用 Set-Location?
- reactjs - 更新 MaterialUI 的“TextField”值会导致页面上的其他 TextField 值清除
- javascript - 如何将 LocalStorage 添加到按钮以更改颜色
- java - 使用 @Query 更新不更新 ReactiveCrudRepository 中的数据
- kubernetes-helm - 错误:创建:创建失败:服务器响应状态码 413 但未返回更多信息