我有一系列的观察记录,描述了动物在特定区域被发现的时间和情况。下面这个示例表格标识了某种动物在每天是否被看到(status == 1
表示看到,status == 0
表示未看到)。
id date status
1 1 2014-06-20 1
2 1 2014-06-21 1
3 1 2014-06-22 1
4 1 2014-06-23 1
5 1 2014-06-24 0
6 2 2014-06-20 1
7 2 2014-06-21 1
8 2 2014-06-22 0
9 2 2014-06-23 1
10 2 2014-06-24 1
11 3 2014-06-20 1
12 3 2014-06-21 1
13 3 2014-06-22 0
14 3 2014-06-23 1
15 3 2014-06-24 0
16 4 2014-06-20 1
17 4 2014-06-21 0
18 4 2014-06-22 0
19 4 2014-06-23 0
20 4 2014-06-24 1
使用
data.table
包,我可以确定动物在该地区不再出现的第一天:library(data.table)
dt <- as.data.table(df)
dt[status == 0, .SD[1], by = id]
id date status
1: 1 2014-06-24 0
2: 2 2014-06-22 0
3: 3 2014-06-22 0
4: 4 2014-06-21 0
虽然上面的表格很有用,但我想知道如何操作函数以找到动物缺席首次出现之前的日期。换句话说,我想知道每只动物在暂时离开之前最后一天在该区域的时间。我的实际数据集将这些存在/缺失观测分为不同的时间长度,具体取决于情况(例如,每3小时、6小时存在/缺失)。因此,访问上一行而不是从每个值中减去时间间隔会更容易,因为它总是在变化。我的期望输出如下:
id date status
1: 1 2014-06-23 1
2: 2 2014-06-21 1
3: 3 2014-06-21 1
4: 4 2014-06-20 1
请随意使用
base
代码或其他包(例如dplyr
)来回答这个问题,我总是喜欢尝试新东西。感谢您抽出时间!