[英]R function for multiple column based condition in dplyr
我有一組帶有記錄日期和疾病狀態的專利 IDS 我想在出現 1 次疾病狀態后刪除行並保留患者從未患病的最小記錄日期(即患者 ID 的所有行中的疾病 = 0)。 我的數據集看起來像
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 11-10 -2012 0
我們可以轉換Dates
、 group_by
ID
並選擇行直到第 1 次出現 1 或最小值。
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
我們也可以使用slice
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.