时间序列数据:如何根据t0中特定变量的值对t-1和t + 1进行编码?

时间:2012-10-23 20:48:47

标签: r variables dataframe time-series

我有兴趣了解外国投资等具体因素在变更前后的表现如何,例如:爆发内战。

这是我的数据的结构(此处未包含该因素):

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)和更改后一年的“+1”(t + 1) 。变化的存在用1编码。

你会怎么做?我很感激任何建议。

1 个答案:

答案 0 :(得分: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