【问题标题】:Find date closest to row specific date查找最接近行特定日期的日期
【发布时间】:2018-06-04 23:28:34
【问题描述】:

我有以下数据框:

第一列包含标识号 (respnr) 第 2 列包含每个标识号的参考日期 (cdatalg) 第 3 到第 16 列包含日期 (datesc1:datesc14)

我希望输入第 17 列,其中打印第 3:16 列中的日期,该日期最接近第 2 列中的参考日期。 我已经尝试过 apply 和 which.min 和 Neardate 的组合,但无法弄清楚。

非常感谢您朝正确的方向推进。

【问题讨论】:

  • 欢迎来到 StackOverflow!请阅读有关how to ask a good question 的信息以及如何提供reproducible example。这将使其他人更容易帮助您。
  • 另外:永远不要使用图片来展示你的数据。另请参阅我之前评论中的链接。

标签: r date


【解决方案1】:

这个简单的例子会帮助你:

# 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

不确定您是否可以有多个距离相同的日期(同一日期多次在基线日期之前/之后的相同天数)以及您希望如何处理它们。

【讨论】:

    猜你喜欢
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 2019-06-30
    • 2022-12-18
    相关资源
    最近更新 更多