【发布时间】:2016-07-09 10:59:01
【问题描述】:
亲爱的:我一直在尝试创建一个事件发生时间变量。确实,前段时间,我向here 寻求帮助。但是,我发现它并没有完全实现我的目的。
以下是我的数据和我要创建“事件时间”的变量。
df2 = structure(list(Country = c("USA", "USA", "USA", "USA", "USA",
"USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA"), year = 2000:2012,
Event = c(0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L,
0L), `**Time-to-event**` = c(0L, 1L, 2L, 0L, 1L, 2L, 3L,
0L, 1L, 0L, 1L, 2L, 3L)), .Names = c("Country", "year", "Event",
"**Time-to-event**"), row.names = c(NA, -13L), class = "data.frame")
Country year Event **Time-to-event**
USA 2000 0 0
USA 2001 0 1
USA 2002 1 2
USA 2003 0 0
USA 2004 0 1
USA 2005 0 2
USA 2006 1 3
USA 2007 0 0
USA 2008 1 1
USA 2009 0 0
USA 2010 0 1
USA 2011 0 2
USA 2012 0 3
有人建议我使用以下代码来创建事件时间变量
i1 <- with(df2, ave(Event, Country, FUN=
function(x) cumsum(c(TRUE, diff(x)<0))))
df2$Time_to_event <- with(df2, ave(i1, i1, Country, FUN= seq_along)-1)
它运行良好,但此代码的问题在于它会计算 Event=1 连续多年的情况。示例如下:
Country year Event **Time-to-event**
USA 2000 0 0
USA 2001 0 1
USA 2002 1 2
USA 2003 0 0
USA 2004 1 **1**
USA 2005 1 **2**
USA 2006 1 **3**
USA 2007 0 0
USA 2008 1 1
相反,对于事件变量在接下来的几年中为 1 的情况,我希望它给出零 (0) 值,而不是计算 1 需要明确的是,这就是我希望看到“事件发生时间”变量的方式。
Country year Event **Time-to-event**
USA 2000 0 0
USA 2001 0 1
USA 2002 1 2
USA 2003 0 0
USA 2004 0 1
USA 2005 1 2
USA 2006 1 0
USA 2007 1 0
USA 2008 1 0
USA 2009 0 0
USA 2010 0 1
【问题讨论】:
标签: r