在多个变量的最近日期过滤数据集

时间:2017-05-08 18:25:26

标签: 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"), 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中日期的每个变量的度量。

我尝试使用这样的dplyr:

data.sub <- data %>%
  group_by(id, vars) %>%

但我不确定如何继续,因为我不得不引用与target.date相关联的ids中的日期。我也想选择最接近的日期而不超过目标日期,但在我创建的这个例子中,某些主题可能无法实现。

以下是我想要获得的输出片段:

       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的两个日期都在目标日期之后。但为了简单起见,我还是把它包括在内。但是如果可能的话,我想把最接近目标日期的日期留下来。

1 个答案:

答案 0 :(得分: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)