我正在尝试处理下面有数据库陷阱数据的数据库。拍摄的照片之间没有任何延迟,因此快速连续拍摄的照片可能是同一个人。
如果它们在彼此的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
答案 0 :(得分:0)
以下是您的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