r语言 - 计算不同长度的数据集之间的 numid 相同时的差异



我有 2 个数据框:"start.date" 和 "death.date"。每个都包括 2 列"numid"(数字 id)和一个"日期"列。"Start.Date"是一个数据集,记录每个Numid的疾病开始。"death.date"仅包括"start.date"中那些在death.date$date中死亡的numid。

我需要计算那些具有相同Numid的人的start.date和death.date之间的差异(=生存)。

这是我写的:

 tempi<-as.numeric(factor(start.date$numid))
 tempj<-as.numeric(factor(death.date$numid))
 for(i in tempi){
   for(j in tempj){
     surviv[i]<-ifelse(colic.date$numid[i]==death.date$numid[j],
                         death.date$date.death[j]-colic.date$date.colic[i],
                         "alive")
   }  
 }

我认为我的问题是surviv[i]只保留了death.date$numid[j]的最后一个值,但我找不到出路。请问任何人都可以对此有所了解吗?可能有更简单的方法可以做到这一点(它运行得很慢 - 即使结果错误)

抱歉,如果在

某处讨论过这个问题,我只是找不到任何适用于我的数据的内容。

干杯马可

这是我的

尝试,使用自定义函数生成日期,然后创建两个 data.frames。然后,我使用 intersect 在数据帧之间找到了 common.id,并使用difftime来查找日期的差异。您的代码很慢,因为您使用 for 循环。阅读此页面上的资源,了解如何对代码进行矢量化。

我用过intersect,不过也看看%in%以找到常见的项目。

#Function to get some dates, using a uniform distribution,
thanks to [Dirk Eddelbuettel][2]
unif.dates <-function(N, start = "2012/01/01", end = "2012/12/31") {
#Orginal at http://stackoverflow.com/a/14721124/2747709
start <- as.POSIXct(as.Date(start))#
end <- as.POSIXct(as.Date(end))#
dt <- as.numeric(difftime(end,start,unit = "sec"))#
ev <- sort(runif(N, 0, dt))#
rt <- start + ev
}
#Generating some random ids and dates and 
assigning them to data.frames
start.date <- data.frame(numid = sample(25,15), date = unif.dates(15, start = "2012/06/01", end = "2012/12/31"))
death.date <- data.frame(numid = sample(25,15),date = unif.dates(15, start = "2012/08/01", 
end = "2013/02/28"))
#Get Common ids between data.frames
common.ids <-intersect(death.date$numid,start.date$numid)
#Calculate time difference, this defauts to days, read ?difftime for other units
z <-difftime(death.date$date[death.date$numid %in% common.ids], start.date$date[start.date$numid %in% common.ids])

相关内容

  • 没有找到相关文章

最新更新