R 为多个变量筛选最近日期的数据集

R 为多个变量筛选最近日期的数据集,r,date,dplyr,R,Date,Dplyr,我处理的数据中,每个受试者都有几个变量,每个变量都有一个测量日期。对每个受试者的变量进行多次测量 我有一个单独的文件,比如说每个主题的“目标日期”。我想过滤原始数据集,只包含与每个主题的目标日期最接近的变量测量值 下面是一个简单的例子: library(dplyr) set.seed(1234) data <- data.frame(dates = sample(seq(as.Date('1999/01/01'), as.Date('2010/01/01'), by="day"),

我处理的数据中,每个受试者都有几个变量,每个变量都有一个测量日期。对每个受试者的变量进行多次测量

我有一个单独的文件,比如说每个主题的“目标日期”。我想过滤原始数据集,只包含与每个主题的目标日期最接近的变量测量值

下面是一个简单的例子:

library(dplyr)

set.seed(1234)

data <- data.frame(dates = sample(seq(as.Date('1999/01/01'), 
as.Date('2010/01/01'), by="day"), 200), 
                   ids = rep(1:50, 2))
data <- arrange(data, ids)
data$vars <- rep(1:2, 100)

target.date <- data.frame(dates = sample(seq(as.Date('1999/01/01'), 
as.Date('2010/01/01'), by="day"), 50), 
                          ids = rep(1:50))
但我不知道如何继续,因为我必须在
target.date
中引用与每个
id
关联的日期。我还想选择最接近的日期,但不超过目标日期,但在我创建的示例中,有些主题可能无法选择

下面是我试图获取的输出的一个片段:

       dates  ids  vars
1 2000-04-01    1     1
2 2003-08-26    1     2
3 2005-01-22    2     1
4 2002-05-13    2     2
.
.
.

对于受试者2,
vars==1
的两个日期都在目标日期之后。但为了简单起见,我还是把它包括进去了。但是如果可能的话,我想选择最接近目标日期的日期,而不必重复

这是我认为你需要的。您的问题不是很清楚,并且您没有提供给定样本数据的预期输出。我可以根据您的反馈进行修改

data <- inner_join(data, target.date, by = 'ids')
data$days <- difftime(data$dates.x, data$dates.y, units = 'days')
data$days <- abs(as.integer(data$days))
data %>%
  group_by(ids, vars) %>%
  filter(days == min(days)) %>%
  slice(1)
数据%
切片(1)

我添加了一些示例输出,但您给出的答案正是我想要的。谢谢
data <- inner_join(data, target.date, by = 'ids')
data$days <- difftime(data$dates.x, data$dates.y, units = 'days')
data$days <- abs(as.integer(data$days))
data %>%
  group_by(ids, vars) %>%
  filter(days == min(days)) %>%
  slice(1)