我有以下数据帧:
第1列包含标识号(respnr)第2列包含每个标识号的参考日期(cdatalg)第3列到第16列包含日期(datesc1:datesc14)
我希望进入第17列,其中第3列第16列的日期打印最接近第2列中的参考日期 . 我已尝试过apply和which.min和neardate的组合,但无法弄清楚 .
推动正确的方向将非常受欢迎 .
这个简单的例子将帮助您:
# example data df = data.frame(id = c("A","B"), date_ref = c("2013-01-26", "2013-01-08"), date1 = c("2013-01-23", "2013-01-01"), date2 = c("2013-01-20", "2013-01-07"), stringsAsFactors = F) df # id date_ref date1 date2 # 1 A 2013-01-26 2013-01-23 2013-01-20 # 2 B 2013-01-08 2013-01-01 2013-01-07 library(dplyr) library(lubridate) library(tidyr) # update date column to datetime variables # (if needed) df = df %>% mutate_at(vars(matches("date")), ymd) df %>% gather(type,date_new,-id,-date_ref) %>% # reshape dataset group_by(id) %>% # for each id filter(abs(difftime(date_ref, date_new)) == min(abs(difftime(date_ref, date_new)))) %>% # keep row with minimum distance between dates ungroup() %>% # forget the grouping select(-type) %>% # remove that variable inner_join(df, by=c("id","date_ref")) # join back original dataset # # A tibble: 2 x 5 # id date_ref date_new date1 date2 # <chr> <date> <date> <date> <date> # 1 A 2013-01-26 2013-01-23 2013-01-23 2013-01-20 # 2 B 2013-01-08 2013-01-07 2013-01-01 2013-01-07
不确定您是否可以使用相同距离的多个日期(相同日期是基线日期之前/之后相同天数的多次)以及您希望如何处理它们 .
1 回答
这个简单的例子将帮助您:
不确定您是否可以使用相同距离的多个日期(相同日期是基线日期之前/之后相同天数的多次)以及您希望如何处理它们 .