如何为事件发生创建持续时间假人?

时间:2014-12-07 15:18:22

标签: r

我有一个面板数据集,我想将BTSCS实现为比例风险模型和包装二进制变量,其中k_t是持续时间假人,表示自上次事件以来的周期数。例如:

pid Conservatism year   Happiness Income       Unemployment   Inflation  k1  k2 k3  k4  k5

1     1         1990     1        1000          10             2           1   0  0  0  0
1     0         1991     1        2000           5             4           1   0  0  0  0
1     0         1992     2        3000           6             4           0   1  0  0  0
1     1         1993     3        1000           7             5           0   0  1  0  0
1     0         1994     3        1000           7             5           1   0  0  0  0

1 个答案:

答案 0 :(得分:0)

不清楚k4k7。创建k1k3的一种方法是:

 nm1 <- paste0('k', 1:3)
 df[nm1] <- Map(`==`, list(df$duration), unique(df$duration))
 df[nm1] <- df[nm1]*1
 df
 #  id y year duration k1 k2 k3
 #1  1 1 1990        1  1  0  0
 #2  1 0 1991        1  1  0  0
 #3  1 0 1992        2  0  1  0
 #4  1 0 1993        3  0  0  1
 #5  1 1 1994        1  1  0  0
 #6  1 0 1995        2  0  1  0
 #7  1 1 1996        1  1  0  0
 #8  2 1 1990        1  1  0  0
 #9  2 0 1991        1  1  0  0

更新

另一种选择是使用model.matrix

 df[nm1] <- model.matrix(~0+factor(duration), df)

数据

 df <- structure(list(id = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L), y = c(1L, 
 0L, 0L, 0L, 1L, 0L, 1L, 1L, 0L), year = c(1990L, 1991L, 1992L, 
 1993L, 1994L, 1995L, 1996L, 1990L, 1991L), duration = c(1L, 1L, 
 2L, 3L, 1L, 2L, 1L, 1L, 1L)), .Names = c("id", "y", "year", "duration"
 ), class = "data.frame", row.names = c(NA, -9L))