gpt4 book ai didi

r - 在 R 中的观察之间计数 "gaps"

转载 作者:行者123 更新时间:2023-12-01 12:09:56 27 4
gpt4 key购买 nike

我无法在 R 中复制在 Stata 中完成的项目。我遇到的一个关键障碍是我需要生成一个变量来计算自某个观察以来的年数。下面是对数据可能的样子的简单再现:

data <- 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==.
}

提前感谢您的帮助!

最佳答案

您可以添加一列 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

关于r - 在 R 中的观察之间计数 "gaps",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52654785/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com