當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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.。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。