我无法复制在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==.
}
谢谢您的帮助!
答案 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