我目前正在使用 R 来处理如下所示的数据集:
age ep
1 0
2 0
3 1
4 1
5 1
6 1
7 0
8 0
9 1
10 1
11 0
我想创建一个变量来跟踪每个 ep=1 系列中第一次出现的 ep=1。这些系列的第一个 ep=1 之前的 ep=0 和每个系列的最后一个 ep=1 之后的 ep=0。
我希望数据集在处理后看起来像这样:
age ep first
1 0 NA
2 0 NA
3 1 1
4 1 NA
5 1 NA
6 1 NA
7 0 NA
8 0 NA
9 1 1
10 1 NA
11 0 NA
我在数据表中工作,因为这个数据集相当大,所以我更喜欢使用数据表的代码处理数据,但是如果这不可能,我可以转换为数据框并使用其他代码。任何帮助将不胜感激。
最佳答案
一个快速的 data.table
方法......
library(data.table)
dt <- fread("age ep
1 0
2 0
3 1
4 1
5 1
6 1
7 0
8 0
9 1
10 1
11 0")
dt[!shift(ep) & ep, first := 1]
# or more explicit:
dt[shift(ep) != 1 & ep == 1, first := 1]
dt
# age ep first
# 1: 1 0 NA
# 2: 2 0 NA
# 3: 3 1 1
# 4: 4 1 NA
# 5: 5 1 NA
# 6: 6 1 NA
# 7: 7 0 NA
# 8: 8 0 NA
# 9: 9 1 1
# 10: 10 1 NA
# 11: 11 0 NA
注意:为了清楚起见,如果您的对象还不是
data.table
。您可以将其强制为 data.table
:setDT(dt)
关于r - 跟踪每一集的第一次发生,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59417459/