2013-06-20 4 views
0

Идея заключается в следующем. У каждого пациента есть уникальный идентификатор пациента, который мы называем hidenic_id. Однако этот пациент может быть госпитализирован несколько раз. С другой стороны, каждая запись имеет уникальный номер emtek_id.Отображение нескольких идентификаторов с использованием R

Пациент 110380 был госпитализирован 14.04.2001 11:08, а затем перенесен через больницу и освобожден 4/24/2001 18:16. Теперь этот пациент снова признался в 5/11/2001 23:24, потому что сейчас у него разные emtek_id. Он выписан из больницы 25.05.2001 16:26. Поэтому вам нужно назначить правильные emtek_ids, проверив даты. Если дата в объединенном файле находится в пределах периода допуска и разряда (или очень близка к 24 часам), мы можем назначить emtek_id.

Как назначить разные emtek_ID для записей с помощью hidenic_id и ввести время?

+2

Добро пожаловать в S.O. Это хорошая идея, когда вы задаете вопрос о публикации воспроизводимого примера, иллюстрирующего вашу ситуацию. Пожалуйста, прочитайте: http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – Chargaff

+0

Необходимость предложить воспроизводимый код и данные особенно TRUE, если вы используете значения даты и времени , Тот факт, что вы предлагаете не ISO-даты, предполагает, что вы, возможно, даже не начали понимать классы datetime. –

ответ

0

Я был заинтересован в вашей проблеме, поэтому создал некоторые данные и попытался решить проблему, но сам столкнулся с некоторой путаницей, а затем разместил свой вопрос, который, я думаю, является тем, что вы просите, но более общим. Вы можете увидеть ответ здесь: How can I tell if a time point exists between a set of before and after times

Мое сообщение генерирует то, во что я верю, это то, с чего вы начинаете, и проверенный ответ - это то, что, я считаю, вы ищете. Полный код приведен ниже. Вам необходимо будет установить zoo и IRanges. Кроме того, я сделал это в версии 2.15.3. IRanges не установлен правильно в 3.0.0.

## package installation 
source("http://bioconductor.org/biocLite.R") 
    biocLite("IRanges") 
install.packages("zoo") 


## generate the emtek and hidenic file data 
library(zoo) 
date_string <- paste("2001", sample(12, 10, 3), sample(28,10), sep = "-") 
time_string <- c("23:03:20", "22:29:56", "01:03:30", "18:21:03", "16:56:26", 
       "23:03:20", "22:29:56", "01:03:30", "18:21:03", "16:56:26") 

entry_emtek <- strptime(paste(date_string, time_string), "%Y-%m-%d %H:%M:%S") 
entry_emtek <- entry_emtek[order(entry_emtek)] 
exit_emtek <- entry_emtek + 3600 * 24 
emtek_file <- data.frame(emtek_id = 1:10, entry_emtek, exit_emtek) 

hidenic_id <- 110380:110479 
date_string <- paste("2001", sample(12, 100, replace = TRUE), sample(28,100, replace = T), sep = "-") 
time_string <- rep(c("23:03:20", "22:29:56", "01:03:30", "18:21:03", "16:56:26", 
       "23:03:20", "22:29:56", "01:03:30", "18:21:03", "16:56:26"),10) 
hidenic_time <- strptime(paste(date_string, time_string), "%Y-%m-%d %H:%M:%S") 
hidenic_time <- hidenic_time[order(hidenic_time)] 
hidenic_file <- data.frame(hidenic_id, hidenic_time) 

## Find the intersection of emtek and hidenic times. This part was done by user: agstudy 
library(IRanges) 
## create a time intervals 
subject <- IRanges(as.numeric(emtek_file$entry_emtek), 
     as.numeric(emtek_file$exit_emtek)) 
## create a time intervals (start=end here) 
query <- IRanges(as.numeric(hidenic_file$hidenic_time), 
     as.numeric(hidenic_file$hidenic_time)) 
## find overlaps and extract rows (both time point and intervals) 
emt.ids <- subjectHits(findOverlaps(query,subject)) 
hid.ids <- queryHits(findOverlaps(query,subject)) 
cbind(hidenic_file[hid.ids,],emtek_file[emt.ids,]) 
+0

Я пробовал использовать петли, чтобы соответствовать всем ID, но кажется, что это займет очень много времени. Я могу опубликовать данные позже, если вы все еще заинтересованы. – bobGZ

+0

Не могли бы вы разместить свой код? Это на самом деле то, что я пробовал первым, но с «IRanges» намного проще. Кроме того, опубликуйте данные, если вам все еще нужна рука. – cylondude