2
親愛的所有人:我一直在嘗試創建一個時間到事件變量。事實上,前一段時間,我要求here尋求幫助。但是,我發現它並未完全達到我的目的。在R中創建事件變量的時間
以下是我的數據和我想創建「Time-to-event」的變量。
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
,我建議使用下面的代碼,以創建時間 - 事件varaible
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)
它運作良好,但與此代碼的問題是,它計算的情況下事件=連續多年。請參閱下面的例子:
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
您好@ Floo0,感謝您與我分享。我試過這給它的錯誤:**未使用的參數(by = rleid(cumsum(Event) - Event))**。什麼意思是「tte」? (時間到了事件,明白了!) – FKG
'cumsum(shift(Event,fill = 1L))'是另一件你可以通過= =來放入的東西。 – Frank
@FKG你需要先設置'setDT(df2)'才能消失。我猜,'tte'只是縮短了「事件發生的時間」。 – Frank