Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中的一个棘手的循环?_R_Loops_Dplyr - Fatal编程技术网

R中的一个棘手的循环?

R中的一个棘手的循环?,r,loops,dplyr,R,Loops,Dplyr,为了解决R中的这个任务,我已经苦苦挣扎了几天(我以前是SAS用户) 背景/研究 -观测数据。克罗恩病患者。2002-2013年间每年收集数据。 -患者可以包括在任何一年内,每年可能不定期就诊。 -我知道每个病人的确切死亡日期。变量:死亡年 -我知道复发的确切日期(兴趣的终点)。变量:复发年 我对复发的发生率感兴趣,我需要计算每年复发的数量除以当年活着的人数。现在的问题是,从纳入的角度来看,个体是不规则的,但我确实知道他们是否真的还活着,他们是否经历过复发 如果我能为每个患者创建12个新变量,我就

为了解决R中的这个任务,我已经苦苦挣扎了几天(我以前是SAS用户)

背景/研究 -观测数据。克罗恩病患者。2002-2013年间每年收集数据。 -患者可以包括在任何一年内,每年可能不定期就诊。 -我知道每个病人的确切死亡日期。变量:死亡年 -我知道复发的确切日期(兴趣的终点)。变量:复发年

我对复发的发生率感兴趣,我需要计算每年复发的数量除以当年活着的人数。现在的问题是,从纳入的角度来看,个体是不规则的,但我确实知道他们是否真的还活着,他们是否经历过复发

如果我能为每个患者创建12个新变量,我就能解决这个问题。每个新变量都应为日历年,如果患者在该年还活着且尚未经历过该事件,则该变量应设置为“1”

因此,问题是,我需要创建一个“年份变量”,该变量在纳入时每年设置为“1”,然后,假设此人没有死亡或经历过事件

例如: 患者X于2005年入选,2009年死亡。对于他,我需要他将以下变量设置为“1”:2005年、2006年、2007年、2008年和2009年。 患者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    .   .
")

数据这有点老套,但这会管用的。首先将数据转换为数字数据框,以便
转换为
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

在你得到你想要的数据集后,你会做生存分析吗?因为,如果您这样做,您就不需要以这种方式重新构造数据。您希望创建这样一个表的原因是什么?也许更简洁的东西可以完成同样的事情?嗨,谢谢你的两个回复。我正在进行生存分析,但我(认为)需要这种设置,因为我正在计算绝对估计数(每1000人-年的发病率)和相对风险估计数(通过Cox回归计算风险比)。现在,如果我想计算每年的发病率(我正在检查时间趋势),那么我相信我需要这个设置。例如,我需要每年处于危险中的人数和当年的事件数量来计算发病率。很抱歉造成混淆。如果您只需要这些,那么您不需要此数据结构。
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
data0[is.na(data0)]<-2012
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