[英]How to filter the closest date of one column that is close to the date of another column in R?
這個話題可能聽起來令人困惑。 這是一個例子:
ID | 索引日期 | 參考日期 | 診斷 |
---|---|---|---|
123 | 2004-07-15 | 2004-07-20 | 沮喪 |
123 | 2004-07-15 | 1999-04-08 | 焦慮 |
456 | 2000-01-15 | 1998-03-15 | 雙極 |
456 | 2000-01-15 | 1999-10-19 | 焦慮 |
我想根據每個ID選擇接近索引日期的參考日期行。 但說真的,我不知道我是如何編寫代碼的。 有人有好主意嗎?
將您的日期列轉換為date
對象,計算索引日期和參考日期之間的diff
, group_by
ID,然后使用slice_min
保持最小差異的值:
library(dplyr)
library(lubridate)
df %>%
mutate(across(contains("Date"), ymd),
diff = abs(Index_Date - Reference_Date)) %>%
group_by(ID) %>%
slice_min(diff)
# ID Index_Date Reference_Date Diagnosis diff
#1 123 2004-07-15 2004-07-20 Depression 5 days
#2 456 2000-01-15 1999-10-19 Anxiety 88 days
歡迎來到 SO。
library(lubridate) # date
library(dplyr) # data wrangling
df <- data.frame(
ID = c("123","123","456","456"),
index_date = ymd(c("2004-07-15","2004-07-15","2000-01-15","2000-01-15")),
reference_date = ymd(c("2004-07-20","1999-04-08","1998-03-15","1999-10-19")),
diag = c("Depression", "Anxiety", "Bipolar", "Anxiety")
)
df %>%
mutate(diff_date = index_date - reference_date) %>%
group_by(ID) %>%
slice_min(diff_date)
ID index_date reference_date diag diff_date
<chr> <date> <date> <chr> <drtn>
1 123 2004-07-15 2004-07-20 Depression -5 days
2 456 2000-01-15 1999-10-19 Anxiety 88 days
訣竅是使用日期差異到 select 與slice_min
的右行
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.