我觉得这很简单。我有一个变量,它是这样的: 0,1,2,3,0,1,2,0,1,从0开始,勾起,然后重置。我需要能够跟踪每个观察的重设数字。所以对于那个数据集,我期望的值是1,1,1,1,2,2,2,3,3。
我现在用的是Stata,但我换到了R,如果比较容易的话。我有大约50万的观察,所以一些不需要太长时间的东西将被感激。
发布于 2020-03-06 07:55:12
Stata解决方案:
clear
input foo
0
1
2
3
0
1
2
0
1
end
generate wanted = sum(foo == 0)
list, separator(0)
+--------------+
| foo wanted |
|--------------|
1. | 0 1 |
2. | 1 1 |
3. | 2 1 |
4. | 3 1 |
5. | 0 2 |
6. | 1 2 |
7. | 2 2 |
8. | 0 3 |
9. | 1 3 |
+--------------+发布于 2020-03-06 00:38:13
在R中,使用cumsum非常简单。当在序列中遇到0时,这基本上会增加计数。
x <- c(0, 1, 2, 3, 0, 1, 2, 0, 1)
cumsum(x == 0)
#[1] 1 1 1 1 2 2 2 3 3发布于 2020-03-06 10:50:45
下面是使用findInterval的另一个基本R解决方案,即,
findInterval(seq_along(x),which(x==0))
# [1] 1 1 1 1 2 2 2 3 3https://stackoverflow.com/questions/60555945
复制相似问题