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

我正在寻求用括号中的相应值替换问号,例如,更改前一年的“-1”(t-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 回答