R 时间序列数据:如何编码t-1和t+;1基于t0中特定变量的值?

R 时间序列数据:如何编码t-1和t+;1基于t0中特定变量的值?,r,variables,dataframe,time-series,R,Variables,Dataframe,Time Series,我有兴趣了解一个具体因素,如外国投资在变化前后5年的表现,例如内战爆发 这是我的数据结构(此处不包括系数): 我试图用括号中的相应值替换问号,例如,变更前一年(t-1)的“-1”和变更后一年(t+1)的“+1”。变更的存在用1编码 你会怎么做?我很感谢你的建议 谢谢你,德温!同样,您的解决方案有效地解决了问题。非常感谢。 > dat <- read.table(text="year country change time + 2001 A 0 ?

我有兴趣了解一个具体因素,如外国投资在变化前后5年的表现,例如内战爆发

这是我的数据结构(此处不包括系数):

我试图用括号中的相应值替换问号,例如,变更前一年(t-1)的“-1”和变更后一年(t+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
> 
> 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
> 
> 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