基于另一数据帧的多行从一个数据帧进行子集

时间:2020-03-26 13:43:44

标签: r loops date filter subset

我正在处理来自电子书手表的加速器数据,并且我正在尝试根据算法对人睡眠的时间进行子集化。 我已经确定了一个人睡觉的时间段,其起点和终点位于单独的数据帧中,然后位于我的原始数据中。我现在正在尝试过滤掉一个人入睡和醒来的时间点之间的数据。

我设法为第一列(即第一天晚上)写了一个过滤器,但我不太知道如何将其扩展到其他日子。

Data[Data$timestamp %in% Sleep$in_bed_time:Sleep$out_bed_time,] -> Data_sleep

时间戳如下所示:2020-01-23 23:22:07

我尝试使用for,并使用ncol扩展功能,直到数据帧Sleep的最后一行,其中存储了入睡时间和就寝时间。

谢谢!

编辑:我已经找到解决方法,但我仍然想知道如何扩展上面指定的过滤器,该过滤器仅将Sleep $ in_bed_time中列的第一行考虑到其他行

2 个答案:

答案 0 :(得分:0)

您可以尝试使用与您的方法相近的c()来组合输入和输出值。

Data[Data$timestamp %in% c(Sleep$in_bed_time,Sleep$out_bed_time),] -> Data_sleep

或者您可以在两列中都进行检查,并使用| OR逻辑运算符。

Data[Data$timestamp %in% Sleep$in_bed_time | Data$timestamp %in% Sleep$out_bed_time,] -> Data_sleep

答案 1 :(得分:0)

我找到了一条捷径,我将发布给遇到相同问题的每个人:

如果有一列中指定了非穿戴/穿戴时段或睡眠/非睡眠时段,则可以使用actigraph.sleepr::combine_epochs_periods标记这些时段。然后,将在附加列中将第一个睡眠时间标记为“ 1”,依此类推。所有其他非睡眠列都将包含NA,您可以通过na.omit

来将其排除