簡體   English   中英

如何過濾R中一列與另一列日期最接近的日期?

[英]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對象,計算索引日期和參考日期之間的diffgroup_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM