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)