如果重复条目出现在R中的某个时间范围内,如何删除它们



我正在尝试处理一个像下面这样的数据库,它包含相机陷阱数据。拍摄的照片之间没有延迟,所以连续拍摄的照片很可能是同一个人。

如果物种的重复出现在10分钟内,我想删除它们,因为它们很可能是同一个体。(如果从上一张照片到下一张照片相隔不到10分钟)。有办法在R中做到这一点吗?非常感谢。

  Site.Name Sampling.Unit.Name Photo.Date Photo.Time   Genus Species Number.of.Animals
1 Ranomafana        CT-RNF-1-01 06/10/2010   00:01:00                                  
2 Ranomafana        CT-RNF-1-01 11/10/2010   00:28:00 Eliurus  tanala                 1
3 Ranomafana        CT-RNF-1-01 12/10/2010   04:39:22   Fossa fossana                 1
4 Ranomafana        CT-RNF-1-01 12/10/2010   04:39:27   Fossa fossana                 1
5 Ranomafana        CT-RNF-1-01 12/10/2010   16:47:41 Nesomys   rufus                 1
6 Ranomafana        CT-RNF-1-01 12/10/2010   16:47:46 Nesomys   rufus                 1

这是您的data.frame,只有日期和时间

 dat <- data.frame(Photo.Date =
 c("6/10/2010","11/10/2010","12/10/2010","12/10/2010","12/10/2010","12/10/2010"),
 Photo.Time = c("00:01:00","00:28:00","04:39:22","04:39:27","16:47:41","16:47:46"))

然后使用strptime(条带时间)将日期转换为POSIX格式

date_vec <-strptime(paste(dat$Photo.Date, dat$Photo.Time), "%d/%m/%Y %H:%M:%S")

下一步是确定每次观测之间的时间差。要做到这一点,你需要比较观察1和2,2和3,3和4…

first_date <- date_vec[1:(length(date_vec)-1)]
second_date <- date_vec[2:length(date_vec)]
second_gap <- difftime(second_date, first_date, units="mins")

确定间隔不到10分钟的间隙。您还需要添加TRUE以保留第一次。

dup_index <- second_gap>10
dup_index <- c(TRUE, dup_index)
dat[dup_index, ]

哪个返回

  Photo.Date Photo.Time
1  6/10/2010   00:01:00
2 11/10/2010   00:28:00
3 12/10/2010   04:39:22
5 12/10/2010   16:47:41

HTH

相关内容

  • 没有找到相关文章

最新更新