计算R中观察值之间的“间隙”

时间:2018-10-04 20:36:52

标签: r count

我无法复制在R中的Stata中完成的项目。我遇到的主要问题之一是,我需要生成一个变量,该变量计算自某种观察以来的年数。这是数据的外观的简单再现:

  

数据<-cbind(1960:1970,c(NA,NA,22,NA,NA,NA,24,NA,NA,NA,   22),c(NA,NA,NA,NA,NA,NA,4,NA,NA,NA,4))

      [,1] [,2] [,3]
 [1,] 1960   NA   NA
 [2,] 1961   NA   NA
 [3,] 1962   22   NA
 [4,] 1963   NA   NA
 [5,] 1964   NA   NA
 [6,] 1965   NA   NA
 [7,] 1966   24    4
 [8,] 1967   NA   NA
 [9,] 1968   NA   NA
[10,] 1969   NA   NA
[11,] 1970   22    4

我目前 data的前两列,并且我正在尝试使用函数自动创建第三列。

您可以看到,第三列是由第二列的值为不是 NA而是仅在首次干预之后之间的年数定义的(即第二列的第二列有一个值,但第一列没有)。

如果有帮助,可以使用Stata中的代码完成此技巧,其中since是我简化示例中的第三列。基本上,这段代码是说要创建新变量since,该变量定义为年数,因为第一年之后变量redist中有一个值(在我的示例中为第二列) redist

gen since=.
foreach n of numlist 1(1)10 {
    replace since = year - year[_n-`n'] if redist!=. & redist[_n-`n']!=. & since==.
}

谢谢您的帮助!

1 个答案:

答案 0 :(得分:4)

您可以添加一列NA值,然后用逻辑矢量填充差异。假设我们仅从前两列开始。

data <- cbind(data, NA)
nona <- !is.na(data[,2])
data[,3][nona] <- c(NA, diff(data[,1][nona]))

data
#      [,1] [,2] [,3]
# [1,] 1960   NA   NA
# [2,] 1961   NA   NA
# [3,] 1962   22   NA
# [4,] 1963   NA   NA
# [5,] 1964   NA   NA
# [6,] 1965   NA   NA
# [7,] 1966   24    4
# [8,] 1967   NA   NA
# [9,] 1968   NA   NA
#[10,] 1969   NA   NA
#[11,] 1970   22    4