首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >dplyr中基于多列的条件的R函数

dplyr中基于多列的条件的R函数
EN

Stack Overflow用户
提问于 2020-03-20 17:49:22
回答 2查看 38关注 0票数 1

我有一组具有记录日期和疾病状态的专利id,我希望在疾病发生1个状态后删除行,并保留患者从未得病的最小记录日期(即,患者id的所有行中的disease=0 )。我的数据集如下所示

代码语言:javascript
运行
复制
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 

和我想要的输出

代码语言:javascript
运行
复制
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  11-10 -2012   0
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-20 18:25:57

我们可以转换Datesgroup_by ID,并选择行,直到第一次出现1或最小值。

代码语言:javascript
运行
复制
library(dplyr)

df %>%
  mutate(Date = as.Date(Date, "%d-%m-%Y")) %>%
  arrange(ID, Date) %>%
  group_by(ID) %>%
  filter(row_number() <= which.max(Disease == 1))

#     ID Date       Disease
#  <int> <date>       <int>
#1   123 2012-03-02       0
#2   123 2013-03-03       1
#3   321 2015-03-03       1
#4   423 2016-06-06       1
#5   543 2018-05-08       1
#6   645 2012-10-11       0
票数 0
EN

Stack Overflow用户

发布于 2020-03-21 02:05:01

我们也可以使用slice

代码语言:javascript
运行
复制
library(dplyr)
library(lubridate)
df1 %>% 
   arrange(ID, dmy(Date)) %>%
   group_by(ID) %>%
   slice(seq_len(which.max(Disease)))
# A tibble: 6 x 3
# Groups:   ID [5]
#     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 11-10-2012       0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60771817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档