【发布时间】:2018-07-27 12:49:17
【问题描述】:
现实生活中的问题:我有研究志愿者抽血的测试结果。我想将这些结果与志愿者的人口统计和调查数据合并,但其中许多人在不同日期(跨年)进行了多项研究。因此,调查数据行必须与测试结果对象 ID 完全匹配,并尽可能接近抽血日期(可能准确或相差几天或几周)。此外,一些受试者有来自不同抽血日期的多个验血结果。
玩具示例:
set.seed(905)
#The "test result" data frame:
df.1 <- tibble(id = c('A1', 'A1', 'A2', 'A3', 'A3'),
draw.date = as.Date(c("2013-01-19", "2015-03-22", "2013-01-19",
"2014-04-23", "2016-05-07")),
result1 = rnorm(5))
#The "survey results" data frame:
df.2 <- tibble(id = c('A1', 'A1', 'B1', 'A2', 'A3'),
test.date = as.Date(c("2013-02-01", "2015-02-28", "2017-01-26",
"2014-04-23", "2016-05-06")),
survey1 = 101:105,
survey2 = letters[1:5])
#The desired final data frame:
desired <- tibble(id = df.1$id,
draw.date = df.1$draw.date,
result1 = df.1$result1,
test.date = as.Date(c("2013-02-01", "2015-02-28", "2014-04-23",
"2016-05-06", "2016-05-06")),
survey1 = c(101, 102, 104, 105, 105),
survey2 = c('a', 'b', 'd', 'e', 'e'))
评论:
我无法让 R 仅在具有匹配 ID 的人中找到最接近的日期。换句话说,阻止它针对所有 test.dates 检查 draw.date 并将其限制为仅具有匹配 ID 的 test.dates。
我已经搜索过之前的问题,但在两个具有不同日期的数据框中(次要匹配变量),它们都没有重复的 ID(主要匹配变量)。我找不到任何适合我的东西。
我更喜欢 dplyr 解决方案,但我愿意接受任何可行的方法。我不熟悉 data.table 包,所以如果这是我唯一的选择,请慢慢引导我:)
注意:我现实生活中的 df.1 是 1524 obs x 22 vars,而 df.2 是 26802 obs x 7317 vars。
【问题讨论】: