我一直在努力解决R中的这项任务(我以前的SAS用户)。
设置/学习 - 观测数据。克罗恩病患者。数据是在2002 - 2013年期间每年收集的。 - 患者可以包括在任何一年,并且每年的访问可能是不规则的。 - 我知道每个病人的确切死亡日期。变量:DEATH_YEAR - 我知道复发的确切日期(感兴趣的终点)。 VARIABLE:RELAPSE_YEAR
我对复发的发生率感兴趣,我需要计算每年的复发次数除以当年活着的人数。现在的问题是,从包容性来看,个体是不规则的,但我确实知道他们当年是否真的活着,并且他们是否经历过复发。
如果我可以为每位患者创建12个新变量,我可以解决这个问题。每个新变量都应该是日历年,并且此变量应设置为' 1'如果患者在那一年还活着并且还没有经历过该事件。
因此问题是我需要创建一个年变量'被设置为' 1'因为这个人没有死亡,或者已经经历过这一事件,所以每年都会被列入其中。
一个例子: 患者X被列入2005年并于2009年去世。对他来说,我需要他遵循以下变量:' 2005' 2006',' 2007',' 2008& #39;和' 2009'设置为' 1'。 患者Y被列入2005年并经历了2007年的活动。对他来说,我需要以下变量:' 2005'' 2006',2007'设置为' 1'。 (是的,事件/死亡年份仍需设置为' 1')。
以下是我的数据集的外观:
data <- read.table(header = TRUE, text = "
patient visit first_visit relapse_year death_year
1 2003 2003 . 2010
1 2004 2003 . 2010
1 2009 2003 . 2010
2 2002 2002 2006 .
2 2006 2002 2006 .
2 2006 2002 2006 .
2 2008 2002 2006 .
2 2012 2002 2006 .
3 2004 2004 . .
3 2008 2004 . .
3 2008 2004 . .
")
这是DESIRED数据集
desired_data <- read.table(header = TRUE, text = "
patient visit first_visit relapse_year death_year YEAR2002 YEAR2003 YEAR2004 YEAR2005 YEAR2006 YEAR2007 YEAR2008 YEAR2009 YEAR2010 YEAR2011 YEAR2012
1 2003 2003 . 2010 . 1 1 1 1 1 1 1 1 . .
1 2004 2003 . 2010 . 1 1 1 1 1 1 1 1 . .
1 2009 2003 . 2010 . 1 1 1 1 1 1 1 1 . .
2 2002 2002 2006 . 1 1 1 1 1 . . . . . .
2 2006 2002 2006 . 1 1 1 1 1 . . . . . .
2 2006 2002 2006 . 1 1 1 1 1 . . . . . .
2 2008 2002 2006 . 1 1 1 1 1 . . . . . .
2 2012 2002 2006 . 1 1 1 1 1 . . . . . .
3 2004 2004 . . . . 1 1 1 1 1 1 1 1 1
3 2008 2004 . . . . 1 1 1 1 1 1 1 1 1
3 2008 2004 . . . . 1 1 1 1 1 1 1 1 1
")
对于这方面的任何建议,我将非常感激! 提前谢谢!
答案 0 :(得分:2)
这有点hackish,但这会奏效。首先将数据转换为数字数据框,以便.
变为NA
:
data0<-data.frame(lapply(data,function(x) as.numeric(as.character(x))))
head(data0)
# patient visit first_visit relapse_year death_year
# 1 1 2003 2003 NA 2010
# 2 1 2004 2003 NA 2010
# 3 1 2009 2003 NA 2010
# 4 2 2002 2002 2006 NA
# 5 2 2006 2002 2006 NA
# 6 2 2006 2002 2006 NA
然后用2012年(或去年的任何一项)代替NA值。
data0[is.na(data0)]<-2012
现在您可以使用pmin
来确定患者死亡/复发/实验结束的时间。最后要做的是对列号使用算术来创建新数据集:
activeYears<-matrix(0,nrow(data0),11)
colnames(activeYears)<-2002:2012
startYear<-data0$first_visit[row(activeYears)]
endYear<-pmin(data0$relapse_year[row(activeYears)],data0$death_year[row(activeYears)])
colYear<-col(activeYears)+2001
activeYears[]<-startYear<=colYear & endYear>=colYear
activeYears
# 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012
# [1,] 0 1 1 1 1 1 1 1 1 0 0
# [2,] 0 1 1 1 1 1 1 1 1 0 0
# [3,] 0 1 1 1 1 1 1 1 1 0 0
# [4,] 1 1 1 1 1 0 0 0 0 0 0
# [5,] 1 1 1 1 1 0 0 0 0 0 0
# [6,] 1 1 1 1 1 0 0 0 0 0 0
# [7,] 1 1 1 1 1 0 0 0 0 0 0
# [8,] 1 1 1 1 1 0 0 0 0 0 0
# [9,] 0 0 1 1 1 1 1 1 1 1 1
#[10,] 0 0 1 1 1 1 1 1 1 1 1
#[11,] 0 0 1 1 1 1 1 1 1 1 1