r - 在 R 中发生 Event/Diseased(1) 之后删除行
问题描述
我是 R 新手,我有一组带有疾病状态的专利 ID。我想在疾病发生 1 种状态后删除这些行。我的数据集看起来像
ID Date Disease
123 02-03-2012 0
123 03-03-2013 1
123 04-03-2014 0
321 03-03-2015 1
423 06-06-2016 1
423 07-06-2017 1
543 08-05-2018 1
543 09-06-2019 0
645 08-09-2019 0
645 10-10-2018 0
645 11-10 -2012 0
预期产出
ID Date Disease
123 02-03-2012 0
123 03-03-2013 1
321 03-03-2015 1
423 06-06-2016 1
543 08-05-2018 1
645 08-09-2019 0
645 10-10-2018 0
645 11-10 -2012 0
请建议一个返回预期输出的代码。提前致谢!
解决方案
使用dplyr
一种方法是选择所有行,如果没有 Disease == 1
出现在一个ID
或只选择行直到第一个 1。
library(dplyr)
df %>%
group_by(ID) %>%
filter(if(any(Disease == 1)) row_number() <= match(1, Disease) else TRUE)
# ID Date Disease
# <int> <chr> <int>
#1 123 02-03-2012 0
#2 123 03-03-2013 1
#3 321 03-03-2015 1
#4 423 06-06-2016 1
#5 543 08-05-2018 1
#6 645 08-09-2019 0
#7 645 10-10-2018 0
#8 645 11-10-2012 0
数据
df <- structure(list(ID = c(123L, 123L, 123L, 321L, 423L, 423L, 543L,
543L, 645L, 645L, 645L), Date = c("02-03-2012", "03-03-2013",
"04-03-2014", "03-03-2015", "06-06-2016", "07-06-2017", "08-05-2018",
"09-06-2019", "08-09-2019", "10-10-2018", "11-10-2012"), Disease = c(0L,
1L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L)), class = "data.frame", row.names = c(NA,
-11L))
推荐阅读
- spring - Spring Integration:发布/订阅:订阅者是否有办法让消息为它排队,即使它暂时处于非活动状态?
- mongodb - 如何在 Mongo 服务器端 javascript 中使用二进制或 UUID 类型?
- arrays - 为什么我在排序数组的第一个元素中得到一个随机数?
- bash - 如何从案例中获取名称列表?
- python - 如何在python中使用正则表达式跳过字符串中2个字符之间的字符?
- oracle - 如何使用气流将数据从一个 oracle 数据库传输到另一个 oracle 数据库
- excel - VBA SumIfs 范围对象
- ios - 更改 Mapbox IOS 中未聚集标记的图标颜色
- reactjs - 停止重新渲染反应功能组件
- python - 使用 python-hypothesis 处理断言/异常