我正在尝试清理具有多个数据点的时间序列。数据按天和"嘟嘟"排列。我只想在同一天保留彼此相距1个哔哔声的项目。
为了做到这一点,我创建了一个伪变量,将日数乘以10,并将蜂鸣声添加到其中
我想知道是否可以使用某种子句来指定我希望保留的数据与其前导或滞后变量连续=1,但也小于50(这样它将保持天数隔离(。或者,有没有一种方法可以按参与者分组,然后按天分组,这样它就可以在参与者之间和每一天之间应用,而不会在几天之间删除不正确的数据,例如,它不应该因为离第一天太远而删除第二天的嘟嘟声7。
我这样做是为了使用ESM包中名为lagvar的函数来创建一个时间滞后序列。在执行此操作之前,我想确保删除day_beep中与其相邻的变量中大于1的任何变量。
例如。采用以下行和day_beep值
Participant ID Day Beep Dummy Variable
1 1 1 101
1 1 2 102
1 1 4 104
**1 1 7 107**
1 2 3 203
1 2 4 204
2 1 2 102
2 1 3 103
**2 2 5 205
2 3 4 305**
**3 1 1 101**
3 2 4 204
3 2 5 205
**4 1 7 107**
4 4 4 404
4 4 5 405
在这种情况下,我想删除星号之间的数据,因为它要么是来自邻居的连续超过1次的嘟嘟声,要么是序列中的孤立嘟嘟声。
对于整个数据帧,最简单的方法是什么?
如有任何帮助,我们将不胜感激!
您可以使用dplyr
中的lead
和lag
来只保留在之前或之后具有连续值的行
library(dplyr)
df %>%
group_by(Participant_ID) %>%
filter(((Dummy_Variable - lag(Dummy_Variable)) == 1) |
(lead(Dummy_Variable) - Dummy_Variable == 1))
输出
Participant_ID Day Beep Dummy_Variable
1 1 1 1 101
2 1 1 2 102
3 1 2 3 203
4 1 2 4 204
5 2 1 2 102
6 2 1 3 103
7 3 2 4 204
8 3 2 5 205
9 4 4 4 404
10 4 4 5 405