我正在尝试处理一个像下面这样的数据库,它包含相机陷阱数据。拍摄的照片之间没有延迟,所以连续拍摄的照片很可能是同一个人。
如果物种的重复出现在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