[英]Selecting an ID based on hierarchical criteria
直升機在那里。 我有一組患者在不同的日期被診斷出患有某種疾病(但標准不同),如下:
ID1 = c(12,14,56)
Date_ID1 = c(20160209,20120101, 20170227)
Criteria_1 = c("B","C","A")
ID2 = c(NA,43,22)
Date_ID2 = c(NA,20160710,20170227)
Criteria_2 = c(NA,"B","B")
ID3 = c(96,41,123)
Date_ID3 = c(20170227,20120101,20160601)
Criteria_3 = c("A","B","A")
test = data.frame(ID1, Criteria_1,Date_ID1,ID2, Criteria_2,Date_ID2,ID3,Criteria_3,Date_ID3)
每行代表同一位患者,每次檢查都分配一個新 ID。 我需要的是 select 基於分層標准(A>B>C)每行一個 ID; 如果有聯系,select ID 應對應於該診斷的最早日期。 output 預計如下所示:
cbind(test,data.frame(Selected_ID = c(96,41,123)) )
任何建議都非常受歡迎。
我正在為您的test
添加行 ID。
testR = data.frame(ID1, Criteria_1,Date_ID1,ID2 ,Criteria_2,Date_ID2,ID3,Criteria_3,Date_ID3) %>%
rowid_to_column("ROW")
library(tidyverse)
library(lubridate)
pivot_longer
三種方式。 (我想我本可以一口氣完成,但我發現這更容易理解。我將這條管道分成單獨的塊,這樣你就可以分別評估它們,看看發生了什么。但我沒有打印中間結果;使帖子過長
piv3 <- testR %>%
pivot_longer(cols = starts_with("Criteria"),
names_to = "Criteria_L",
values_to = "CritLetter") %>%
pivot_longer(cols = starts_with("Date"),
names_to = "Date_L",
values_to = "Date") %>%
pivot_longer(cols = starts_with("ID"),
names_to = "ID_L",
values_to = "ID")
clnPiv <- piv3 %>%
filter(!is.na(ID)) %>%
mutate(Date = ymd(Date)) %>%
mutate_at(vars(matches("_L")), ~ str_sub(., -1)) %>%
filter(Criteria_L == Date_L & Date_L == ID_L)
我將打印出 clnPiv,但
# A tibble: 8 x 7
ROW Criteria_L CritLetter Date_L Date ID_L ID
<int> <chr> <fct> <chr> <date> <chr> <dbl>
1 1 1 B 1 2016-02-09 1 12
2 1 3 A 3 2017-02-27 3 96
3 2 1 C 1 2012-01-01 1 14
4 2 2 B 2 2016-07-10 2 43
5 2 3 B 3 2012-01-01 3 41
6 3 1 A 1 2017-02-27 1 56
7 3 2 B 2 2017-02-27 2 22
8 3 3 A 3 2016-06-01 3 123
selexId <- clnPiv %>%
group_by(ROW) %>%
arrange(CritLetter, Date) %>%
summarise(SelectedID = first(ID))
testR %>%
left_join(selexId, by = "ROW")
ROW ID1 Criteria_1 Date_ID1 ID2 Criteria_2 Date_ID2 ID3 Criteria_3 Date_ID3 SelectedID
1 1 12 B 20160209 NA <NA> NA 96 A 20170227 96
2 2 14 C 20120101 43 B 20160710 41 B 20120101 41
3 3 56 A 20170227 22 B 20170227 123 A 20160601 123
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.