使用跟踪对象的XY位置的跟踪数据。我的数据的可复制示例:
trial <- c(rep(1, 25), rep(2, 25), rep(3, 25))
timemini <- c(1:25)
time <- c(rep(timemini, 3))
Y <- c(NA, NA, 3:10, NA, NA, NA, NA, NA, 16:25, NA, NA, NA, 48:55, NA, NA, NA, NA, NA, NA, NA, NA, 64:69, NA, 36:37, NA, 39:40, NA, 42:45, NA, NA, NA, NA, NA, 51:59)
example <- as.data.frame(cbind(trial, time, Y))
我对筛选NA以及每个NA周期之前的第一个点和之后的最后一个点很感兴趣,而不管NA周期有多长(短至一个点,有时长达100左右) 。
我可以使用以下代码过滤掉NA本身没有问题:
NA.from.example <- example %>%
filter(is.na(Y))
试图用这个问题来解决这个问题,但是我能做的就是做到这一点,它只过滤掉每个NA的第一个实例(这是每次试验的第一点,因为跟踪器在此之前需要移动几帧可以找到对象。
NAsandwich <- example %>%
group_by(trial) %>%
slice(max(1, match(TRUE, is.na(Y)) - 5):match(TRUE, is.na(Y)))
任何帮助,将不胜感激!我通常使用dplyr,但是任何可行的解决方案都可以。
编辑
这是我期望的预期输出:
subset <- example[c(1:3, 10:16, 26:29, 36:45, 51:52, 53:55, 56:58, 61:67),]
每个试用版始终以NA开头,因此我不需要之前的要点,但是我通常在管道中使用group_by(trial)运行代码。我不知道这是否适用。
这是一个选择 rleid
library(dplyr)
library(data.table)
example %>%
group_by(trial) %>%
group_by(grp = rleid(!is.na(Y)), .add = TRUE) %>%
filter(all(is.na(Y))| row_number() %in% c(1, n())) %>%
ungroup
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句