2012-10-23 69 views
0

我有興趣瞭解外國投資等具體因素在變化前後如何表現5年內戰爆發。時間序列數據:如何根據t0中特定變量的值對t-1和t + 1進行編碼?

這是我的數據的結構(這裏不包括的因素):

year country change time 
2001 A   0  ? (-1) 
2002 A   1  0  
2003 A   0  ? (+1) 
2004 A   0  ? (+2)  
2002 B   0  ? (-2) 
2003 B   0  ? (-1) 
2004 B   1  0 
... 

我正在尋求通過在括號中的相應值替換問號,如「-1」 (t-1)和變更後(t + 1)的一年的「+1」。變更的存在用1編碼。

您會如何做到這一點?我很感激任何建議。

回答

1
> dat <- read.table(text="year country change time 
+ 2001 A   0  ?(-1) 
+ 2002 A   1  0  
+ 2003 A   0  ?(+1) 
+ 2004 A   0  ?(+2)  
+ 2002 B   0  ?(-2) 
+ 2003 B   0  ?(-1) 
+ 2004 B   1  0 
+ ", header=TRUE) 
> with(dat, tapply(change, country, 
           function(x) seq(length(x))-which(x==1))) 
$A 
[1] -1 0 1 2 

$B 
[1] -2 -1 0 

> dat$time <-unlist(with(dat, tapply(change, country, 
           function(x) seq(length(x))-which(x==1)))) 
> dat 
    year country change time 
1 2001  A  0 -1 
2 2002  A  1 0 
3 2003  A  0 1 
4 2004  A  0 2 
5 2002  B  0 -2 
6 2003  B  0 -1 
7 2004  B  1 0 
> 

稍微不太複雜的是使用的ave代替unlist(tapply(...))

> dat$time <- with(dat, ave(change, country, FUN=function(x) seq(length(x))-which(x==1))) 
> dat 
    year country change time 
1 2001  A  0 -1 
2 2002  A  1 0 
3 2003  A  0 1 
4 2004  A  0 2 
5 2002  B  0 -2 
6 2003  B  0 -1 
7 2004  B  1 0 
+0

非常感謝迪文!同樣,您的解決方案可以高效有效地解決問題。非常感謝。 – TiF

相關問題