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

时间:2012-08-02 20:47:22

标签: r remove-if

我正在尝试处理下面有数据库陷阱数据的数据库。拍摄的照片之间没有任何延迟,因此快速连续拍摄的照片可能是同一个人。

如果它们在彼此的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

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