0

外国投資などの特定の要因が、内戦の勃発などの変化の前後 5 年間にどのように振る舞うかに興味があります。

これは私のデータの構造です(要因はここには含まれていません):

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
...

疑問符を括弧内のそれぞれの値に置き換えようとしています。たとえば、変更の前の年 (t-1) は "-1"、変更の翌年 (t+1) は "+1" です。変更の存在は 1 でコード化されます。

これをどのように行いますか?私はどんな提案にも感謝しています。

4

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
于 2012-10-23T22:40:14.293 に答える