当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R neardate 对于数据集 1 中的每个条目,查找数据集 2 中最接近值的索引。


R语言 neardate 位于 survival 包(package)。

说明

医疗工作中的一项常见任务是为每个受试者找到最接近某个索引日期的实验室值。

用法

neardate(id1, id2, y1, y2, best = c("after", "prior"),
nomatch = NA_integer_)

参数

id1

索引组的主题标识符向量

id2

参考组的标识符向量

y1

通常是索引组的日期向量,但允许任何可排序的数据类型

y2

参考日期集

best

如果 best='prior' 为每个主题找到第一个小于或等于目标 y1 值的 y2 值的索引。如果best='after'为每个受试者找到第一个大于或等于目标y1值的y2值。

nomatch

不匹配的项目返回的值

细节

此例程与 matchfindInterval 密切相关,其中第一个找到完全匹配,第二个找到最接近的匹配。这会在完全匹配的标识符集中找到最接近的匹配日期。临床研究中经常需要最接近的日期匹配。例如,数据集 1 可能包含受试者标识符和某些程序的日期,数据集 2 包含实验室测试的日期和值,查询是查找干预后但不超过 7 天的第一个测试值。

id1id2 参数与 match 类似,因为我们正在搜索将在 id2 中找到的 id1 实例,并且结果与 id1 的长度相同。但是,此例程返回与 y1 最佳匹配的匹配项,而不是返回与 id2 的第一个匹配项。

y1y2 参数不必是日期,该函数适用于任何数据类型,以便表达式 c(y1, y2) 给出合理的、可排序的结果。请注意匹配日期和 DateTime 值以及时区的影响,但请参阅 as.POSIXct 。如果y1y2 不属于同一类别,则用户自行处理。由于存在结果可能合理的成对的不匹配数据类型,因此在这种情况下,例程将在“用户知道他们在做什么”的假设下继续进行。买者自负。

第二个数据集中匹配观测值的索引,或 nomatch 值(表示未成功匹配)

例子

data1 <- data.frame(id = 1:10,
                    entry.dt = as.Date(paste("2011", 1:10, "5", sep='-')))
temp1 <- c(1,4,5,1,3,6,9, 2,7,8,12,4,6,7,10,12,3)
data2 <- data.frame(id = c(1,1,1,2,2,4,4,5,5,5,6,8,8,9,10,10,12),
                    lab.dt = as.Date(paste("2011", temp1, "1", sep='-')),
                    chol = round(runif(17, 130, 280)))

#first cholesterol on or after enrollment
indx1 <- neardate(data1$id, data2$id, data1$entry.dt, data2$lab.dt)
data2[indx1, "chol"]

# Closest one, either before or after. 
# 
indx2 <- neardate(data1$id, data2$id, data1$entry.dt, data2$lab.dt, 
                   best="prior")
ifelse(is.na(indx1), indx2, # none after, take before
       ifelse(is.na(indx2), indx1, #none before
       ifelse(abs(data2$lab.dt[indx2]- data1$entry.dt) <
              abs(data2$lab.dt[indx1]- data1$entry.dt), indx2, indx1)))

# closest date before or after, but no more than 21 days prior to index
indx2 <- ifelse((data1$entry.dt - data2$lab.dt[indx2]) >21, NA, indx2)
ifelse(is.na(indx1), indx2, # none after, take before
       ifelse(is.na(indx2), indx1, #none before
       ifelse(abs(data2$lab.dt[indx2]- data1$entry.dt) <
              abs(data2$lab.dt[indx1]- data1$entry.dt), indx2, indx1)))

作者

Terry Therneau

也可以看看

match , findInterval

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Find the index of the closest value in data set 2, for each entry in data set one.。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。